2017-05-09 5 views
-1

유효한 미국 도시 이름을 확인하기 위해 정규식을 사용하고 있습니다. 다음과 같이 내 요구 사항은 다음과 같습니다 특정 특수 문자를 허용하는 미국 도시와 일치하는 정규식

  • 은 25 자까지 가능
  • 에만 알파 문자와 다음의 특수 문자를 사용할 수 : ',.-합니다.
  • 거짓을 사용하면 St. Clou$$, [email protected], $t. Thomas을 사용해야합니다.

  • 사실을 사용하면 O'John, St. Cloud, Cov d'Aline, Milt-Freeman을 사용해야합니다. 다음 /(^|\s)[a-zA-Z',.\s-]{1,25}(?=\s|$)((?!\W)[a-zA-Z',.\s-]{1,25}(?=\s|$))?/g

    제가 테스트 한 방법은 다음과 같습니다 : 여기

내가 지금까지 가지고있는 표현이다

let regex = /(^|\s)[a-zA-Z',.-\s]{1,25}(?=\s|$)((?!\W)[a-zA-Z',.-\s]{1,25}(?=\s|$))?/g; 
let str = "St. Clou$$"; 
let validation = regex.test(str) 
if(validation){ 
    return true 
} else { 
    return false } 

위의 테스트를 사용하여 정규식 표현은 모두 통과 할 것으로 보인다 그러나 나의 테스트는 또한 St. Clou$$$t. Thomas를 위해 true를 돌려주고있다. 여러 단어가 있고 단어 중 하나가 여전히 통과하는 용납 할 수없는 특수 문자가있는 경우처럼 보입니다.

위에서 언급 한 모든 잘못된 조건에 대해 표현식을 false로 만들려면 무엇을 추가해야합니까? 이견있는 사람? 고맙습니다.

+0

첫 번째 -'-'는 문자 클래스 ('[] '내부)에서 특별한 의미를 갖습니다. (^ | \ s) [a-zA-Z ', .- \ s] {1,25} (? = \ s | $)'는 예를 들어's '와 일치하고, 또는''(3 스페이스) - 또는 하나의 문자'C'. 두 번째 부분은 선택 사항입니다 ('((!! \ W) [a-zA-Z ', .- \ s] {1,25} (? = \ s | $))? 그래서 모든 정규 표현식은 true를 반환하기 위해 일치해야합니다 (예를 들어) 언급 된 조합 중 하나입니다. '^'와'$'를 사용하여 문자열의 시작과 끝을 고정시켜야한다. – ClasG

+0

감사합니다. 예. 나는'-'이 내가 올린 즉시 잘못된 위치에 있다는 것을 깨달았다. 도움을 감사하십시오. –

답변

1

^[a-zA-Z',.\s-]{1,25}$ 

그것은 문자열 ^의 시작을 일치하고 $을 종료, 허용 된 문자 1-25 일치를 사용해보십시오. 또한 문자 범위를 지정하기 때문에 문자 클래스의 끝에 -을 배치했습니다.

var re = /^[a-zA-Z',.\s-]{1,25}$/g, 
 
    data = ['St. Clou$$', 'New York', '[email protected]', 'Houston', '$t. Thomas', 'Chicago']; 
 

 
data.forEach(function(city) { 
 

 
    document.write(city + '='); 
 

 
    if(re.test(city)) { 
 
    document.write('true<br>'); 
 
    } else { 
 
    document.write('false<br>'); 
 
    } 
 
});

Check it out here at regex101 :

은 여기에 illustrationusing JS이다.

+0

그게 효과가! 감사! –

관련 문제