2010-01-04 6 views
7

저는 꽤 구체적인 정규식을 찾고 있습니다.하나의 숫자 또는 하나의 영숫자가 아닌 문자가 필요한 정규식

나는 이러한 문자 중 하나 이상이 중 하나 숫자 값 또는 문자 및 숫자에 해당하지 않는 문자이고, 적어도 5 charactors을 필요로 정규식을 원한다.

^(?=.*[\d]|[[email protected]#$%\^*()_\-+=\[{\]};:|\./])(?=.*[a-z]).{5,20}$ 

그래서 문제가 "또는"일부입니다

이것은 내가 지금까지있는 것입니다. 영숫자가 아닌 값을 허용하지만 적어도 하나 이상의 숫자 값이 필요합니다. 내가 또는 연산자 "|"가 있음을 알 수 있습니다. 내 숫자와 비영 문자 사이에 필요하지만 작동하지 않는 것 같습니다.

어떤 제안이 좋을 것입니다.

+0

당신이 \ W (비 단어 문자, [A-ZA-Z0-9_의 즉 아무도 사용할 수있는 비 영숫자 문자 ]) 대신에 [] @ # $ % \^*() _ \ - + = \ [{\}} ;: | \ ./] –

답변

19

시도 :

^(?=.*(\d|\W)).{5,20}$ 

짧은 설명 :

^       # match the beginning of the input 
(?=      # start positive look ahead 
    .*      # match any character except line breaks and repeat it zero or more times 
    (      # start capture group 1 
    \d     #  match a digit: [0-9] 
    |      #  OR 
    \W     #  match a non-word character: [^\w] 
)      # end capture group 1 
)       # end positive look ahead 
.{5,20}     # match any character except line breaks and repeat it between 5 and 20 times 
$       # match the end of the input 
+0

두려워하지 않는 ... 숫자 또는 영숫자가 아닌 문자가 필요하지 않습니다. –

+0

예. 제대로 테스트하지 않았나?미리보기에는 문자열에 적어도 하나 이상의 숫자 또는 비 단어가 포함되어야합니다. –

+2

... 그리고 "** 숫자 **와 ** 영숫자가 아닌 문자"*를 사용했다면 트릭을 할 것입니다 :'^ (? =. * \ d) (? =. * \ W) . {5,20} $' –

0

어때? 길이 5, 20이 거대한 정규식의 모든 물건 정말 필요한 정상 나 strlen 기능

+0

영숫자가 아닌 문자를 원하는 것처럼 실제로 작동하지 않습니다. 시작 또는 끝 부분에 숫자 문자가 있으면 실패합니다. 그러나, 당신은 올바른 길로 나를 데려갔습니다. –

+0

정말 테스트 해 봤어? 시작 또는 끝 부분에서 영숫자가 아니거나 숫자가 아닌 문자에도 사용할 수 있습니다. – YOU

0

가 사용하십시오 들어

^.*?[\[email protected]#$%\^*()_\-+=\[{\]};:|\./].*$ 

? 그냥 프로그램 로직 (5 ≤ length(s) ≤ 20) ∧ (/[[:digit:]]/ ∨ /[^[:alpha:]]/)을 사용하십시오. 구문 적으로나 의미 상으로는 훨씬 더 읽기 쉽습니다.

^.*[\d\W]+.*$ 

을 그리고 문자열의 크기를 확인하기 위해 다음과 같은 몇 가지 코드를 사용 :

+0

나는 여기 저기에 ASP.NET 멤버쉽을 사용하고 있으며, 돌아가서 예외 사항 등과 함께 여러 장소에서 로직을 구현해야 할 것입니다. 멤버쉽 설정에서 Regex를 사용하는 것이 더 쉽습니다. Regex는 다른 모든 프로그래밍 기법과 마찬가지로 그 위치를 가지고 있습니다. –

1

아마도이 당신을 위해 작동 할 수

if(str.len >= 5 && str.len =< 20 && regex.ismatch(str, "^.*[\d\W]+.*$")) { ... } 
+0

나는 현재 문제에 대한 모든 정규 표현식이 필요하다. –

0

아주 간단한 솔루션을 S.Mark 일단 궤도에 날 잡았어 내 숫자 및 비영 숫자 숫자를 하나로 합칠 필요가 있습니다. 이 5와 20 자 사이의 암호를 허용하고 적어도 하나 개의 문자를 필요로 하나/숫자 및 또는 하나의 비 영숫자 것

^(?=.*[\[email protected]#$%\^*()_\-+=\[{\]};:|\./])(?=.*[a-z]).{5,20}$ 

:

여기에 관심있는 사람을위한 최종 정규식입니다.

관련 문제