2017-11-13 13 views
0

아래 양식과 일치하면 true을 반환하는 정규식을 작성합니다. 그렇지 않으면 false을 반환해야합니다. 그것은 단지 아래 단어를 허용해야한다 :Regex with javascript에서 연속적으로 특정 단어 만 허용하는 방법

긍정적 인 경기 (true를 반환)

UA-1234-1,UA-12345-2,UA-34578-2 

제외 어 검색 (false를 돌려 또는 null)

참고 : A이없는 U

UA-1234-1,U-12345-2 

항상 내게 진실을 알려야합니다. N 정규식에 전달 된 문자열은 다음 UA-1234-1,UA-12345-2,UA-34578-2,...........

내가 할 노력하고 있지만 첫 번째 요소 만 일치하고 null을 반환하지 않는 것입니다.

var pattern=/^UA-[0-9]+(-[0-9]+)?/g; 

pattern.match("UA-1234-1,UA-12345-2,UA-34578-2"); 

pattern.exec("UA-1234-1,UA-12345-2,UA-34578-2) 

미리 감사드립니다. 도움말 크게 감사드립니다.

+0

예는,이 겨우 대답 당신에게 너무 많은 @Wiktor Stribizew –

답변

0

당신이 필요로하는 패턴은 앵커로 둘러싸인 패턴 (^ - 문자열의 시작 $ - 문자열의 끝) (초기 "블록") 처음에는 당신의 패턴과 일치 다음 , 0 회 이상 나오는 항목과 일치합니다 블록 패턴이 뒤 따른다.

모양은 /^BLOCK(?:,BLOCK)*$/입니다. 사이에 선택적 공백을 넣을 수 있습니다 (예 : /^BLOCK(?:,\s*BLOCK)*$/.

결국 패턴은 ^UA-[0-9]+(?:-[0-9]+)?(?:,UA-[0-9]+(?:-[0-9]+)?)*$처럼 보입니다. 그것은 읽기 쉽게 유지하기 위해 계속 동적으로 구축하는 것이 가장 좋습니다 :

const block = "UA-[0-9]+(?:-[0-9]+)?"; 
 
let rx = new RegExp(`^${block}(?:,${block})*$`); // RegExp("^" + block + "(?:," + block + ")*$") // for non-ES6 
 
let tests = ['UA-1234-1,UA-12345-2,UA-34578-2', 'UA-1234-1,U-12345-2']; 
 
for (var s of tests) { 
 
    console.log(s, "=>", rx.test(s)); 
 
}

+1

고맙습니다. @Wiktor Stribiżew –

+1

다시 한번 감사드립니다. –

-2

쉼표로 문자열을 분할하고 대신 각 요소를 테스트하십시오.

+0

감사합니다. [어떻게 좋은 답변을 작성합니까?] (https://stackoverflow.com/help/how-to-answer) – ctwheels

+0

@ Calvin Taylor. 감사합니다. 정규식을 사용하여 사용할 수 있습니까? –