2016-07-11 2 views
0

나는 다음과 같은 조건과 일치하는 것 (자바에서 사용) 정규식을 작성하는 것을 시도하고있다가 (그것이 특정 전화 형식의) 영숫자 문자열에서 숫자의 발생을 제한정규식 :

  1. 수 (하지만
    • A) 목록 항목
    • B를하지 문자열의 시작 또는 끝
    • C)가 ㄱ 없습니다에서) - +
    • #를 포함하거나 수와 필요하지 않음) 시작 +, 게다가 그
  2. 의 연속 출연 전자 두 -, # 그것은 단지 숫자 문자와 숫자 문자 (숫자)의 양을 포함 할 수는
  3. (20)에 8 ~

I이어야한다 1), 2a), 2b)하는 법을 아십시오. 아직 2c를 시도하지 않았습니다. 하지만 3)에 심각한 문제가 있습니다. 필자는 어떻게 든 [0-9]의 모습을 제한 할 수 있었지만 동일한 숫자의 외모를 확인했으며, 모든 숫자의 수를 제한하려고합니다. 가 어떤 아이디어는 환영 Limit number of alpha characters in regular expression

:

+1

정규식 (있는 그대로)과 시도한 샘플 입력을 공유해 주실 수 있습니까? –

답변

0

살펴 이것은 미리를 사용하여,이 당신을 위해 그것을 수행해야합니다 :

그 시도에 기반을

^(?=[^\d\n]*(?:\d[^\d\n]*?){8,20}$)(?!.*[-#][-#])\+?[\d][\d#-]+[\d]$ 

그것은 시작 앞으로 8 자에서 20 자 사이의 자릿수를 확인하고 임의의 수의 자릿수를 반복하여 검사합니다. 선택적으로 숫자 앞에 임의의 숫자를 붙일 수 있습니다. 이것이 자릿수 검증입니다.

그렇다면 반복되는 하이픈이나 해시 기호가 없다는 것을 주장하는 부정적인 look-ahead가 있습니다 (하나를 뒤쪽 참조 = 2 행으로 캡처).

마지막으로 선택 사항 인 +을 허용하고 그 후에 반복되는 숫자, 하이픈 및 해시 기호를 테스트합니다.

Check the examples here at regex101.

편집 :

하나가 다른 (또는 -##-)에 직접 다음 여기서 케이스 2B 및 2C를 처리 정규식 수정.

+0

완벽하게 작동합니다. 설명 주셔서 감사합니다. 숫자 계산과 혼란스러워졌습니다! –