2016-09-21 2 views
2

안녕하세요 정규 표현식에 대해 많이 알지 못합니다. 그러나 angularJs를 사용하여 폼 유효성 검사를 수행해야합니다. 이하 정규식 : 두 조건 중 하나와 일치합니까?

입력 박스만을 허용한다

요건이다 어느

(1) 제 2 개 문자 알파 + 6 숫자

또는

(2하다면) 8 숫자

다음은 몇 가지 올바른 입력은 다음과 같습니다 -

(1) SH123456 (2) 12345678 (3) sd456565

내가 그 위의 조건을 모두 잘 작동하지만 여전히 같은 문자열을 수락, data-ng-pattern="/(^([a-zA-Z]){2}([0-9]){6})|([0-9]*)?$/" 시도 S2D3E4F5 및 기타 여러 조합이 가능합니다.

내가 잘못하고있는 것을 발견 할 수 없다.

도움이됩니다.

감사

정규식에서
+0

[정규식에서 일치하는 것 또는 다른 하나 또는 둘 다] 가능한 중복 (http://stackoverflow.com/questions/13351990/in-a- regular-expression-match-one-thing-or-another - 또는 - 둘 다) –

+0

@DavidR 아니, 이건 중복되지 않습니다. 앵커링 문제입니다. – tchrist

답변

2

을, 두 개의 다른 지점은 별도로 고정됩니다

  • (^([a-zA-Z]){2}([0-9]){6})-2 문자와 문자열의 시작
  • |에서 6 자리 - 또는
  • ([0-9]*)?$ - 문자열 끝의 선택적인 0 개 이상의 숫자

당신은 그룹의 경계를 조정해야합니다

data-ng-pattern="/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})?$/" 
       ^      ^^^^ 

regex demo를 참조하십시오. 이제

, 패턴이 일치합니다 :

  • ^ - 문자열의 시작
  • ( - 그룹화의 시작 :
    • [a-zA-Z]{2}[0-9]{6}-2 문자와 6 자리
    • | - 또는
    • [0-9]{8} - 8 자리
  • )? - 문자열의 끝 - 그룹화의 끝 ? 정량은 (선택 사항) 1 또는 0 번
  • $ 일치한다.
+0

@shreyansh 답변을 승인 된 것으로 표시하는 것을 잊지 마십시오. – Tordek

+0

언제나처럼, 모든 downvoters 건설적인 비평을 제공하는 것을 환영합니다. –

+0

나는'regex' 태그 질문의 관측자이며 대부분 잘 알고 있습니다. ** comment ** 내에서 주어진 down-votes에 대한 우려를 표명 할 때마다 누군가가 내 대답/질문에 무작위로 투표를합니다. 또한 그러한 진부한 질문과 답변은 일반적으로 높은 상향 투표를받지 못하지만 비슷한 주제에 참여할 때 비슷한 일이 발생합니다. 투표 불일치로 인해 운영자의 관심을 계정에 쉽게 전달할 수 있습니다. – revo

2

당신은 그것을 받아 들일 것이 DEMO LINK HERE

^(([a-zA-Z]{2}|[0-9]{2})[0-9]{6})?$ 

을 시도 할 수 있습니다 :

  1. AB123456
  2. 12345678
  3. aa441236
  4. aw222222
+0

그것은 의미 론적으로 내 것과 동일하므로 작동 할 수도 있습니다. 공식적인 차이점은 단지 하나의 중첩 된 캡처 그룹이 여기에 사용되는 반면 내 그룹에는 중첩 된 그룹이 없습니다. 둘 다 비슷한 성능을 보입니다. –

+0

숫자 값은 두 경우 모두 공통입니다. 그래서 6 개의 숫자 값에 대해 공통된 부분을 사용했습니다. 정규 표현식을 작성하는 방법은 여러 가지가 있습니다. :) –

+0

^([a-zA-Z0-9] {2} [0-9] {6})? $'와 동일합니다. – jensgram

관련 문제