2012-05-18 6 views
0

양식에 대한 보안 질문의 경우 사용자에게 4 또는 four 또는 그 변형을 입력해야합니다.특정 번호 또는 특정 단어의 정규식

지금이 정규식 /\b4|four\b/gi은이 사이트에서 발견 한 변형입니다. 문제는 사용자가 458 또는 뭔가를 입력 할 수 있다는 것입니다. 그래서, 누군가 나를 도울 수 있습니까?

+0

시각 도움말을 보려면 [여기] (http://gskinner.com/RegExr/)를 클릭하십시오. 내 정규 표현식은 여기에 있습니다. – Drise

답변

0

이렇게 대/소문자를 구분해서 비교해야합니다. 일부 (아마도 대부분의) 정규 표현식은 대소 문자를 구분하지 않기 위해 (?i) 패턴을 지원합니다.

^(?i)(?:4|four)$ 

그러나

이 자바 스크립트는 당신이 더 당신이 시작한 일을 같은 구문을 사용할 수있는 경우 ...

/^(?:4|four)$/i 

/i이 경우 소문자 구분을위한 것입니다. 하지만 글로벌 일치를위한 것이기 때문에 /g을 삭제 했으므로 여기서는 필요하지 않습니다.

4|four(?:non capturing) 그룹 안에 넣었습니다. 이 값은 캡처 된 값으로 아무것도 수행 할 필요가없는 경우 기존 (capturing) 그룹을 사용하는 것보다 효율적입니다.

그런 다음 모든 것을 둘러싼 ^$ 앵커로 추가 선행 문자 나 다음 문자가 없는지 확인하십시오.

+0

고마워, 스티브. 그것은 트릭을했다. –

0

난 당신이 "후자의 변화"가 무슨 뜻인지 잘 모르겠지만, :

/^(4|four)$/i 

이되는 전체 문자열과 일치합니다 4 사 중 하나. ^은 시작 부분에만 일치하고 끝에는 $과 일치합니다. /i은 대소 문자를 구별하지 않는다는 것을 의미합니다 (따라서 FOUR도 허용됩니다). 일부 언어는 이와 같은 플래그를 사용하지 않습니다 (이 경우 문장을 구분하지 않는 방식으로 문서를 확인해야합니다). 당신은 대소 문자를 구별 일치를 사용할 수없는 경우, 대신이 작업을 수행 할 수 있습니다 당신은 아마도에서 작업 평등 비교를 가지고있어 어떤 언어 물론

/^(4|[fF][oO][uU][rR])$/i 

을. 그래서 당신은

if (str == "4" || str == "four") 
+0

"Four", "FOUR"또는 "FOur"와 같은 의미였습니다. –

+0

@TimHuynh 그러면 대소 문자를 구분하지 않습니다. – derobert

0

보십시오 (예를 들어) 할 수있는 :

^4|four$ 

하는 "네" "네"를 일치합니다. 사용하는 프로그래밍 언어에 따라 C#의 대소 문자를 구분하지 않는 옵션이있을 수 있습니다. RegexOptions.IngoreCase

관련 문제