2013-08-23 4 views
8

을 허용하지 않는 I 특정 특수 문자를 허용하지 않는 다음과 같은 정규 표현식이 :이 작동하고정규식은 특정 특수 문자

if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){  
    alert("password not valid"); 
} 
else 
{ 
    alert("password valid"); 
} 

합니다. 이 정규식은 대괄호 (~,.<>;':"\/\[\]\|{}()-=_+) 안에 특수 문자가 포함되어 있지 않으면 암호를 허용합니다.

여기 내 문제는 이상한 숫자를 입력하는 것을 허용하지 않는다는 것입니다.

내가 여기에서 놓친 것은 무엇입니까? 미리 감사드립니다! 당신은 거기에 문자 범위를 가지고

jsFiddle

+4

@ m.buettner 's answer를 사용하여 정규 표현식을 수정할 수 있지만 여전히 잘못하고 있습니다. whilelist aproach를 사용하여 대신 * 유효한 * 문자를 지정하십시오! –

+0

@DarenThomas는 전적으로 동의합니다 –

+0

유효한 문자 만 확인하려면 if 조건이 있지만 서버 쪽에서 사용했습니다. 내가 지금하고있는 일은 허용되지 않는 문자가 있는지 확인하는 클라이언트 측 함수를 만드는 것입니다. 암호 표시기 신호를 weak로 변경하십시오. – Gerald

답변

10

: 여기

는 샘플입니다 )-= (번호 포함) )= 사이의 모든 ASCII 문자를 포함하는. 그것을 클래스의 끝으로 -를 이동하거나 탈출 :

/[`~,.<>;':"\/\[\]\|{}()=_+-]/ 

을 또한, 당신이 그 모든 문자를 이스케이프 할 필요가 없습니다 : 귀하의 경우, 그것은 아마 것을

/[`~,.<>;':"/[\]|{}()=_+-]/ 

주동안,

if (/[`~,.<>;':"/[\]|{}()=_+-]/.test(testString))){ 
    ... 

test가 (당신이 필요로하는 모든입니다) 부울을 반환 test 대신 match을 사용하려면 충분한 210은 모든 캡쳐 그룹이있는 배열을 반환합니다 (어쨌든 무시합니다).

Daren Thomas가 의견에서 지적한 바와 같이 으로 지정할 문자를 결정하고을 허용해야합니다. 현재 접근법은 모든 종류의 별난 유니 코드 문자를 다루지 않기 때문에 비교적 표준적인 문자 인 _에 대해 불평하는 중이다.

if (!/[^a-zA-Z0-9]/.test(testString)) { 
    ... 

을 그리고 당신은 허용 할 않는 모든 문자를 포함 화이트리스트를 만들려면, 당신은 단순히 문자 클래스와 조건 모두를 반전 할 수 있습니다.

+0

고맙습니다! 'test'를 위해서도. – Gerald