2017-10-16 5 views
2

고유 트랜잭션 식별자 (UTI)의 유효성을 검사하기 위해 정규식 패턴을 작성하려고합니다. 설명보기 : hereRegex가 고유 트랜잭션 식별자를 확인합니다

UTI는 두 개의 연결된 부분 인 접두어와 트랜잭션 식별자로 구성됩니다. 다음은 고려해야 할 규칙 요약입니다.

  • 접두어는 정확히 10 자의 영숫자입니다.
  • 트랜잭션 식별자는 1-32 자입니다.
  • 트랜잭션 식별자는 영숫자이지만 다음과 같은 특수 문자도 허용됩니다. . : _ -
  • 특수 문자는 트랜잭션 식별자의 시작 또는 끝에 나타낼 수 없습니다.
  • 두 개의 특수 문자를 연속으로 사용할 수 없습니다.

지금까지 (무시 케이스와 일치)이 지점의 첫 번째 4의 UTI의 유효성을 검사하는 패턴을 구축했다 : 나는 마지막 점과 사투를 벌인거야 그러나

^[A-Z0-9]{11}((\w|[:\.-]){0,30}[A-Z0-9])?$ 

(NO이 행의 특수 문자). 나는 정규 표현식에 관해서는 약간의 초보자가되는 것을 쉽게 인정한다. 그리고 내가 이것을 익히기 위해 익숙하지 않은 좀 더 진보 된 기술이 있을지도 모른다고 생각하고 있었다. 어떤 정규 표현가가 저를 계몽하는 데 관심이 있습니까?


해결 : 감사 사용자에게 보헤미안을 제가 찾던 패턴을 찾을 수 있도록하십시오. 최종 해결책은 다음과 같습니다.

^[a-zA-Z0-9]{11}((?!.*[.:_-]{2})[a-zA-Z0-9.:_-]{0,30}[a-zA-Z0-9])?$ 

개선을위한 제안 사항이있는 경우 후속 답변을 위해 질문을 남깁니다.

+0

귀하의 정규식과 동일하기 때문에 글자가 대문자 여야합니다 제안합니다. 그게 사실이야? 소문자는 "영숫자"입니다. – Bohemian

+0

@ 보헤미안 : 예, 실제로 무시 된 대소 문자를 사용하여 일치하는 엔진을 실행하고 있습니다. 이에 대해 작은 말을했습니다. –

답변

2

이 시도 :

^[A-Z0-9]{11}(?!.*[.:_-]{2})[A-Z0-9.:_-]{0,30}[A-Z0-9]$ 

비밀 소스는 다음과 같은 텍스트가 하지 2 연속 "특별한"문자 .:_-를 포함한다는 것을 (입력을 사용하지 않고)을 주장 앞서 (?!.*[.:_-]{2}) 부정적인 모습이다. \w를 사용하여 시도, 소문자를 허용하고 너무 강조


주, \w[a-zA-Z0-9_]

+0

고마워, 그게 내가 찾고 있었던 바로 그거야! 위의 편집에서 최종 해결책을 게시하면서 사소한 조정을했습니다. –