2016-06-30 2 views
0

다음 정규식 수수께끼에 대한 도움을 주시면 감사하겠습니다. 다음 규칙에 대해 유효성을 검사하는 정규식 문이 필요합니다. 입력에 문자, 특수 문자 및 숫자가 포함될 수 있습니다. 유효하지 않은 입력Regex, 문자 및 숫자 허용, 최대 7 자리까지 허용

aa1234aa2.(less than 7 digits) 
asd234566 (less than 7 digits) 

예 :

입력이 "0"로 시작할 수 없습니다 , 입력은 최대 7 자리

유효한 입력의

예를 가질 수

0asdfd92 (starts with 0) 
asd12312311 (more than 7 digits) 

내가 지금까지 시도 :

^\D[0-9]{0,7}$, 

는 d0000000에 대해 유효성을 검사하지만, 입력은 많이 복잡 경우 0이 요구 사항에서 제거 할 수 있습니다로 시작할 수 없습니다

부분

을 d0d0dddd1234d 할 수있다. 가장 중요한 것은 "7 자리까지 입력 할 수 있습니다"부분을 포함하는 것입니다.

감사합니다, 올렉

+0

그래서 심지어'abc1' 당신을 위해 유효한 입력 테스트 할 수 있습니다? – anubhava

+0

예, abc1이 유효한 입력입니다. –

+0

하지만이 요구 사항과 모순됩니다. n.1' "0"으로 시작할 수없고 문자 또는 특수 문자를 허용 할 수 없습니다. ""문자를 전혀 허용 할 수 없습니다 "라고 읽습니다. – nagyben

답변

2

이것은 당신이 필요합니다!

Attempt 1: ^[1-9]\d{0,6}$ 
Attempt 2: ^[^0][\d\w]{0,6}$ 
Attempt 3: ^[^0].{0,6}$ 
Attempt 4: ^([\D]*\d){0,7}[\D]*$ 
Attempt 5: ^([\D]*[1-9]){0,7}[\D]*$|^[^0]\d{0,6}$ 
Attempt 6: ^([\D]*[1-9]){1,7}[\D]*$|^[^0]\d{1,6}$ <- this should work 

Example here

당신이 정규식을 사용할 수 있습니다
+0

감사하지만 문자열이 숫자가 아닌 다른 문자로 시작될 수 있습니다. –

+0

'문자 "또는"특수 문자 "허용"0 "으로 시작할 수 없습니다. 규칙을 명확히 할 수 있습니까? – nagyben

+0

안녕하세요, 방금했습니다 –

0

:이 다음 검증을 수행합니다

^[^0](?:\D*\d){1,7}\D*$ 

RegEx Demo

:

  1. 이 아닌 0으로 시작해야합니다
  2. 내가 제대로 요구 사항을 이해하면,이 작동 첫번째 문자
0

후 1 ~ 7 자리 숫자를 가지고 :

^(?=[^0])(\D*\d){0,7}\D*$ 
0으로 시작하고 7을 가지고하지 않는 문자열을 수

또는 더 적은 자릿수. 어떤 다른 문자도 허용됩니다.

설명

첫 번째 부분 (?=[^0]) 문자열은 0으로 시작되지 않습니다 확인하기 위해 확인하는 주장이다. 나머지는 임의의 수의 비 숫자와 그 뒤에 숫자가 최대 7 회 일치합니다. 그런 다음 문자열의 끝 앞에있는 임의의 수의 비 숫자.

0

장황하지만, 트릭을 수행합니다.

(^[1-9][^\d]*([\d]?[^\d]*){0,6}$|^[^\d]+([\d]?[^\d]*){0,7}$)

나는 쉽게 이가지 경우에 정규식을 분할 발견 : 문자열이 숫자로 시작하면, 그것을 수행하지 않을 때.

1

펄 가정 (는 펄 정규 표현식 모양) :

  1. 확인을 앞에 0을 위해 : 이하 7 개 자리에 if (subst($pass, 0, 1) eq '0') { fail }
  2. 확인 : if (($pass =~ tr /0-9/0-9/) > 7) { fail }

나에 대해 일반적으로 해요을 하나의 정규 표현식으로 모든 것을 밀어 넣으려고 시도 할 때, 특히 작업을 수행 할 수있는 다른 도구가있는 경우. 이 경우 선행 0이있는 경우 tr이 실행되지 않고 앞에 오는 0은 문자열 시작 부분에 쉽게 나타납니다.

이렇게하면 다른 사람과 독립적으로 추가 제한을 쉽게 적용 할 수 있습니다. 예를 들어, "다른 문자 유형으로 구분되는 경우 7 자리 이상이 될 수 있습니다"(이 정규 표현식은 아마도).

0
^((?:\D+(?:\d?\D*){0,7})|(?:[1-9]\D*(?:\d?\D*){0,6}))$ 

당신은 here