시도 (즉, 무슨 runat="server"
수단 그렇지?), 간단한 해결책이 정규식 사용하는 것이 아마도 :
(?s)^.*Content.*$
을
(?s)
은 Singleline
모드를 켜기 때문에 .
메타 문자는 ( 줄 바꿈 포함) 모든 문자와 일치 할 수 있습니다. 당신이뿐만 아니라 클라이언트에서 실행하려면이를 사용 : 자바 스크립트는 DOT_ALL
, DOTALL
, 점 - 경기 - 모든, 단일로 알려진 Singleline
모드 (대한 해당이 없기 때문이다
^[\s\S]*Content[\s\S]*$
라인 또는 /s
모드). (?s)
및 (?i)
과 같은 인라인 수정 자도 인식하지 못합니다.
한정자 (*
, +
등)가있는 표현식이 한정 기호로 제어되는 그룹에 포함되어있는 (.\s*)*
과 같은 구문을 조심하십시오. 정규식이 일치하는 항목을 바로 얻지 못하면 다시 돌아가서 다른 경로 (즉, 문자열의 다른 부분을 일치시키는 정규 표현식의 다른 부분을 사용)로 일치 시키려고 시도합니다. 이는 매우 비싸고 성능면에서 좋지 않을 수 있습니다. .
및 \s
은 많은 문자와 일치 할 수 있기 때문에이 정규식은 특히 나쁩니다. 따라서 포기하기 전에 탐색해야하는 경로의 수가 크게 늘어납니다.
현상은 일반적으로 catastrophic backtracking으로 알려져 있으며 일반적으로 일치 할 가능성이없는 경우에 나타납니다. Content
시퀀스가있을 때 유효성 검사기가 잘 작동 할 것으로 기대합니다. 당신은 단지 전체 단어 Content
에 일치 할 경우 그런데
, 당신과 같이, 단어 경계를 추가해야합니다 :
MalContent
및
Contentious
같은 단어에 대한 오 탐지를 방지 할 수
(?s)^.*\bContent\b.*$
합니다. \b
은 다른 정규 표현식에서 다르게 작동합니다. .NET에서 ECMAScript
모드를 지정하지 않으면 유니 코드를 인식합니다.자바 스크립트에서는 ASCII 문자와 숫자 만 단어 문자로 인식합니다. 대부분의 브라우저에서 그렇지만이를 당연한 것으로 받아들이지는 않습니다.
굉장한 대답. 클라이언트 측에서 실행되기를 원했기 때문에 (\ runt = "server"는 서버가 태그를 해석해야 함을 의미하고, EnableClientScript = "false"는 서버에서만 실행합니다) . – Eric