2016-12-06 1 views
0

특정 패턴과 일치하는 경우에만 유효한 양식을 만들려고합니다.Angular2 모델 기반 폼 유효성 검사기 패턴

그것은 일치해야합니다 : 여기

123456789 
123-456-789 
123 458 789 

내 패턴 :

^(\d{3}-\d{3}-\d{3})|(\d{3} \d{3} \d{3})|(\d{9})$ 

첫째, 재미있는 사실, 검사기에 사용 할 수 있도록, 내가 모든 슬래시를 탈출했습니다 보인다 그 안에.

Validators.pattern('^(\\d{3}-\\d{3}-\\d{3})|(\\d{3} \\d{3} \\d{3})|(\\d{9})$') 

내 문제는 총 문자열 크기 번호를 제한하지 않는다는 것입니다.

예를 들어, 1234567890000과 일치합니다. 123456789에서 멈추고 추가 문자가 있으면 false 상태가됩니다.

Validators.pattern('\\d{9}') 

또는

Validators.pattern('^\\d{9}$') 

그리고 내가에만 설정할 수 있습니다 정확히 9 자 : 나는 그것을 설정하면,

Validators.pattern('^(\\d{3}-\\d{3}-\\d{3})|(\\d{3} \\d{3} \\d{3})|(\\d{9})$') 
Validators.pattern('(\\d{3}-\\d{3}-\\d{3})|(\\d{3} \\d{3} \\d{3})|(\\d{9})') 

또 다른 재미있는 사실 :

나는 이러한 변형을 시도했다.

저는 정규식 오류라고 확신하지만 Angular2가 ^$ 기호를 사용하여 평가할 문자열을 구분해야하는지 이해할 수 없습니다.

+0

'(? : \\ d {3} ([-]) \\ d {3} \\ 1 \\ d {3} | \\ d {9})' '을 시도하십시오. 'Validators.pattern'의 표현식은 기본적으로 고정되어 있으므로'^'와'$'를 추가 할 필요가 없습니다. –

+0

Plunkr에서 필드에'123-456-7891111'을 입력 해보십시오. 유효성 검사를 통과했지만 의도 한 동작은 유효성 검사기가 123-456-789 이후에 오류를 트리거한다는 것입니다. 내 규칙은 9 자리 숫자 여야하며, 구분 여부는 '-' 또는 공백이어야합니다. – BlackHoleGalaxy

+0

하지만 위 제안에 대한 제안은 맞습니까? [this plunkr] (http://plnkr.co/edit/pGsb23WQmamwChLEWRht?p=preview)을 참조하십시오. –

답변

1

패턴이 문자열 리터럴로 정규식 엔진으로 전달되기 때문에 이중 백 슬래시를 사용해야하며, 정규식 이스케이프는 내 테스트에서 볼 수있는 건 등

, \d, \w 리터럴 백 슬래시가 필요합니다 각도는 패턴 주위에 ^$ 앵커를 그룹화하지 않고으로 추가합니다.

즉, 대체 그룹이있을 때 을 그룹화 구문으로 묶어 앵커를 모든 대체에 적용 할 수 있습니다.

귀하의 ^(\\d{3}-\\d{3}-\\d{3})|(\\d{3} \\d{3} \\d{3})|(\\d{9})$ 및 기타 attemped 패턴이 너무 ^에만 (\\d{3}-\\d{3}-\\d{3})에 적용 $에만 (\\d{9})에 적용 풀어 대안을 포함한다.

발리 코드 내부 사용

'(?:\\d{3}([- ])\\d{3}\\1\\d{3}|\\d{9})' 

, 그것은 ^(?:\\d{3}([- ])\\d{3}\\1\\d{3}|\\d{9})$으로 표시되며, in this demo처럼 작동합니다.

상세 : 패턴 2 개 대안 일치 :

  • \\d{3}([- ])\\d{3}\\1\\d{3}-3 숫자 - 또는 공간을 1 군으로하고 3 자리, 다음 같은 세퍼레이터 (그룹 1로 캡처) 및 다음 3 자리
  • | - 또는
  • \\d{9}-9 자리

^$이 각도로 추가되므로 패턴에 전체 문자열 일치가 필요합니다.

+0

Wiktor에게 감사드립니다. 이제 예상대로 작동합니다. 나는 그룹 구성 연산자에 대해 몰랐다. – BlackHoleGalaxy

+0

버그라고 생각합니다. 각도 개발 팀은 HTML5 패턴과 동일한 동작을 구현해야합니다. 패턴을'^ (? :'및') $ '로 둘러 쌉니다. 사용자 로직을 망치지 않는 방식으로이를 고정시키는 표현식에 대한 추가 레이어를 만듭니다. –

+0

제대로 이해했다면, 일종의 날짜 형식 (YYYYMMDD)을 검증하는 정규식은'(? : \\ d {4} ([-.)) \\ d {2} \\ 1 \\ d {2} | \\ d {8})' – BlackHoleGalaxy

-1

Validator.maxLength를 설정하면 사용자가 주어진 길이의 문자를 입력 할 수 없습니다.

new FormControl('', Validators.maxLength(9) 
+0

정규 표현식에서 9 자리를 - 또는 공백, 자유 그룹별로 분리 할 수 ​​있어야하므로 사용할 수 없습니다. 그것은 캐나다의 죄를 범한 것입니다. 123-456-789. 그러나 때때로 사람들은 대쉬를 사용하지 않고 분리 자로 공백을 두거나 사용하지 않습니다. – BlackHoleGalaxy

관련 문제