2011-01-13 6 views
4

양식 입력 유효성 검사를 위해 JavaScript에서 정규 표현식을 사용하고 싶습니다. 이것들은 <,> 또는 내가 언급 한 임의의 특정 문자 세트를 가질 수없는 문자열입니다. 문자열에 해당 문자가 없으면 테스트가 통과해야합니다.정규식의 부정

그렇다면 어떻게 정규 표현식에서 char을 갖지 않도록 지정할 수 있습니까?

예 :

stringX = "vijay<>@$%_" 

내 목표는

  1. 문자열이 '<', '>'문자가 없어야합니다.
  2. stringX에 해당 문자가 없으면 test가 true를 반환해야합니다.

참고 :

내가 할 수있는 :

stringX = "vijay<>@$%_" 
regExp=/[<>`]/; 
if(!rexExp.test(stringX)) { 
    doSomthing() 
} 

그러나 나는 이것을 원하지 않는다.

작은 문제로 끝나기 때문에.

나는라는 유효성 검사를() 일반적인 기능을 가지고

function validate(stringX, regExp) 
{ 
    if(rexExp.test(stringX)) { // see there is no "!" in the condition. 
     return true; 
    } 
} 

의 내가이 문자열을 확인하기를 원하는 경우를 생각 해보자.

  1. 사례 1 : 입니다. 나는 regExp를 사용할 것이다 :/^ [\ d] * $/
  2. 케이스 2 : <>이 없다. 나는 regExp를 사용할 것이다 :/^ [<>`] * $ 모든 문자가 허용되도록 지정하고 싶지 않으므로. 나는 허용되지 않는 문자 을 지정하고 싶습니다.

그러나 내 유효성 검사 기능은 사례 1에서만 작동합니다. 사례 2에서와 같이 예상되는 결과를 얻지 못합니다. 문자열에 <,>,`chars 만있는 경우에만 Validate()가 true가됩니다.

+0

당신이 한 일은 간단합니다. 너 그것에 대해 맘에 안들니? –

+0

위의 문제를 업데이트했습니다. 왜냐하면 나는 일반적인 부정확 한() 함수를 가지고 있었기 때문에 나는 부정을 말할 필요가있다. –

답변

5

말 그대로 다른 문자가 문자열에있는 괜찮아 경우,이`>, 문자 <이없는 모든 문자열과 일치 할 것이다 :

regexp=/[^<>`]*/; 

편집 : 수정 된 표현을 라인의 시작/끝 앵커 (감사 MizardX)로 :

regexp=/^[^<>`]*$/; 
+2

앵커'^'와'$'를 추가하면 효과가 있습니다. 그것들이 없으면 시작시 빈 부분 문자열과 항상 일치합니다. –

+0

@MizardX 감사, 좋은 지적. –

0
stringX = "vijay<>@$%_" 
regEx=/[<>`]/g; 
stringX.replace(regEx, ''); 
4

당신이 찾고있는 정규 표현식은 이것이다 :

/^[^<>`]*$/ 

사람들이 HTML 태그를 입력에 삽입하지 않도록하려면 javascript를 validator로 사용하는 것을 잊어 버리십시오.

이것은 보안에 대한 잘못된 인식을 줄뿐 아니라 다른 사람이 시스템을 악용하는 것을 막지 않습니다.

더 좋은 방법은 다음 FO 한 경우 : charachters는가

  • HTML 그대로 입력이
  • 저장소를 저장하기 전에, 입력 서버 측 인코딩 서버 측

    • 스트립 및 HTML을 할 때마다 출력을 인코딩 it

    마지막 해결 방법은 사용자가 나중에 원래 입력을 편집 할 수 있어야하는 경우와 같이 가장 유연하므로 가장 선호하는 방법입니다.

    마지막으로, 출력하기 전에 항상 htmlencode 사용자가 생성 한 콘텐츠 또는 문제가 끝날 것입니다.

  • +0

    나는 문자를 검사하고 제거하기 위해 서버 측에서주의를 기울였다. 하지만 클라이언트 측에서는 <,>이 허용되지 않는다는 것을 이미 알고있을 때 서버 호출을하고 싶지 않습니다. 그래서 그가 서버 측 유효성 검사를 기다리지 않고 이러한 문자를 입력했는지 사용자에게 알리고 싶습니다. –