2016-10-03 3 views
2

어쩌면이 말을 제대로 표현하지 못하고 있지만 도움이되는 부분을 찾지 못했을 수 있습니다. 숫자와 대시를 10 개의 기호로 정확히 일치시켜야합니다. 정규식은 다음과 같이 보일 것이다 :특정 길이의 복잡한 정규식 패턴

/[0-9-]{10}/g 

캐치는이 '8888888888'를 일치합니다 및 '----------'각각과 나는 그것을 피하려고한다는 것입니다. 내 출력은 숫자와 유사해야합니다. 따라서 '-'와 'digit'이 모두있는 경우 일치해야합니다. '555-45-217', '12 -34-5412 ','1-2- 3-45-6. 이것은 내가 지금까지 가지고있는 것입니다 :

([0-9]+-[0-9]+(-[0-9]+)*){10} 

그러나 이것은 작동하지 않습니다. {}는 following() 일 때 오류를줍니다. 그래서 제 질문은 어떻게 그러한 목표를 성취 할 수 있을까요? 두 조건 (내부 규칙과 적절한 기호 금액)이 모두있는 경우에만 일치하는 방법.

답변

1

나는 당신이 regex demo

세부를 참조

^(?=[0-9-]{10}$)\d+(?:-\d+)+$ 

사용할 수있을 것 같아요 :

  • ^ -
  • (?=[0-9-]{10}$) 문자열
  • 의 시작 - 문자열은 10으로 구성한다 문자 또는의 문자
  • \d+ - 1 이상의 숫자
  • (?:-\d+)+ - 스트링의 끝 - -의 1 이상의 시퀀스 1+ 자리
  • $ 따랐다.
+0

안녕하세요, Wiktor. 응답 해 주셔서 감사합니다. 이제 내가 올바르게되었는지 보도록하겠습니다. 첫 번째 세트()에서 긍정적 인 미리보기를 사용하여 길이를 지정한 다음 여러 '-num'섹션에 대한 규칙을 설정합니다. 이제 시작시 '+'와 일치하는 방식으로 수정하려고합니다. '+ 555-12-345'. 마지막으로 긴 문자열로 일치하는 항목을 찾아야하므로 '(? = \ s | %)'와 (과) 같이 끝 구분 기호가 필요합니다. 이전의 lookahead는 10 개의 기호 길이 만 지정했기 때문에이 마지막 미리보기가 작동하지 않는 것일 수 있습니까? idk. – Alex

+0

선택적인'+'와 단어 경계는 다음과 같습니다 : \ + (? = [0-9 -] {10} $) \ d + (? : - \ d +) + 구조 : ['\ +? (? = [0-9-] {10} \ b) \ d + (? : - \ d +) + \ b'] (https://regex101.com/r/tLQ3fZ/ 2). –