2010-04-27 3 views
0

사용자가 html 또는 javascript 태그를 웹 페이지의 주석 상자에 입력하지 못하게하는 유효성 검증 표현식을 찾으려고합니다. 한 줄의 텍스트에 대한 좋은html 태그를 제외하기 위해 앞을 내다 보겠습니다.

다음 작품 :

^(?!.*(<|>)).*$ 

이 때문에 점의 개행 문자를 허용하지 않습니다 ..하지만 (.). 나는 이런 식으로 뭔가 함께 갈 경우 :

^(?!.*(<|>))(.|\s)*$ 

그것은 여러 줄 수 있지만 표현은 첫 번째 줄에 '<를'일치와 '>'. 어떤 라인과도 매칭이 필요합니다.

^[-_\s\d\w&quot;'\.,:;#/&\$\%\[email protected]\+\*\\(\)]{0,4000}$ 

을하지만 추한와 나는 다국어 응용 프로그램입니다 있기 때문에 일부 사용자 깰 거라는 걱정 :

이 잘 작동합니다.

아이디어가 있으십니까? 감사!

+0

정규 표현식으로 html로 질문 할 때 사람들은 항상 저에게 그렇게합니다. -'use parser' :) 좋아, 진지하게 : 당신이 사용하는 기술에 대해 뭔가를 말해야합니다. \ w가 비 - 라틴 문자 또는 이상한 문자를 얻는 것이 확실합니까? 처음으로 내 'ąćęłóńśżź'로 피드 할 수 있습니다. – naugtur

+0

전화 bobince .... –

+0

좋아, 나는 그 당시에는 관련이 없다고 생각했기 때문에 좋아, 나는 기술에 대한 정보를 포함하지 않았다. 나는 그렇다고 생각한다. regexp는 ASP.Net 페이지의 RegularExpressionValidator 태그에서 사용됩니다.그래서 목표는 양식이 서버에 제출되기 전에 태그가 클라이언트 측에 존재하지 않는지 확인하는 것입니다. – Remoh

답변

1

RE는 어떤 상황에서도 사용자가 <>을 입력하지 못하게합니다. 예를 들어, "2 >"입니다. 이것은 매우 바람직하지 않습니다.

오히려 (그들이 잘 할 적합하지하는) regular expressions to match HTML를 사용하는 것보다, 단순히 &lt;&gt;로 변환하여 <> 탈출. 또는 HTML의 제한된 하위 집합을 허용하거나 자체 마크 업 언어를 지원하는 허용 목록을 구현하는 선택 언어 패키지를 찾으십시오 (markdown이 좋다고 들음).

"." 개행 문자가 일치하지 않는 경우 일부 regexp 구현은이 동작을 제어하기 위해 플래그를 지원합니다 (일반적으로 "여러 줄"에 대해서는 "m", "한 줄"에 대해서는 "s", 후자는 줄 바꿈에 "."

첫 번째 두 개는 기본적으로 /^[^<>]*$/과 동일하지만 여러 줄 문자열에서 작동합니다. RE를 그렇게 쓰지 않은 이유는 무엇입니까?

+0

앱의 DAL은 이미 '위험한'문자를 이스케이프 처리하지만 두 위치에서 모두 수행합니다. 나는 또한 과거에 클라이언트 측 ASP.Net 유효성 검사기가 태그처럼 보이는 것을 질식시키는 경향이있어서 그 사실을 피하려고 노력하고 있음을 알았습니다. – Remoh

+0

나는 지금까지 보여준 것들이 '<' and '>'의 사용을 막을 것이고, 나는 부정적인 결과를 얻은 후에 그 문제를 해결할 계획 이었음을 알고 있습니다. 다중 행 플래그가 있는지 확인합니다. – Remoh

0

그래서, 나는 그것을 조사해 보았고 .Net 'SingleLine'옵션은 정규 표현식에서 "." 새 줄 문자도 일치시킵니다. 불행히도 ASP.Net RegularExpressionValidator에서는 사용할 수 없습니다. 내가 볼 수있는 한^(?!. (< \ w +>))과 같은 것을 만들 수있는 방법이 없습니다. $는 서버 쪽 유효성 검사를 수행하지 않고 여러 줄 텍스트 상자에서 작동합니다.

나는 귀하의 조언을 받아 서버 측의 태그를 탈출하는 길을갔습니다. 이것은 유효성 검증 페이지 지시문을 'false'로 설정해야하지만이 특별한 경우에는 크게 중요하지 않습니다. 왜냐하면 주석 상자가 실제로 걱정할 유일한 것이기 때문입니다.