2011-08-03 6 views
2

"abcdefghij"와 같은 문자 집합이 있고이 문자를 사용하는 경우이 문자를 사용하여 임의의 암호를 생성합니다. 생성 된 암호는 예를 들어 6자를 가질 수 있습니다. tho 이웃 문자가 동일하지 않고 문자가 두 번 이상 반복되지 않도록 정규식을 사용하여 암호의 유효성을 검사하는 방법?정규식 반복 문자 수

+1

어떤 프로그래밍 언어로 제공됩니까? – Qtax

+0

자바에서 이것을 필요로합니다. –

답변

2

당신은 같은 것을 사용할 수 있습니다. 이처럼 쓸 수있는 자바 정규식에서


:

^(?:(.)(?!\1|(?:.*?\1){2}))*\z 
+0

네, 훌륭합니다. 감사합니다 –

+0

왜 투표가? – Qtax

+0

신의 축복이 가득합니다 :) –

-2

AFAIK는이이 편지는 최대에 두 번 표시 보장, 특히 간단한 정규 표현식 (수행 할 수 없습니다. 또한

[^a]*(a[^a]*(a[^a]*)) 
[^b]*(b[^b]*(b[^b]*)) 
.... 

과 같은 표현의 무리를 할 수있는 (매칭에 실패 검증을 의미한다) :

[^a]*aa[^a]* 
[^b]*bb[^b]* 

그러나 이것은 좋은 생각이 아니다 분명

문자를 캡처 그룹으로 처리 할 수 ​​어쩌면 함께 반복하지 않는 것이 조건. ,하지만 난 거의 다른 하나는 정규식으로 확인할 수 없다는 것을 확신합니다.

BTW ... 왜 정규식에 집착합니까? 이러한 검사를 프로그래밍하는 것은 간단합니다. 정규 표현식은 여러 사례에서 유용하지만 모든 검사가 정규식으로 수행 될 수있는 것은 아닙니다. 펄 인용

/^ 
    (?:(.) 
    (?!\1)   # neighbor characters are not identical 
    (?!(?>.*?\1){2}) # character does not occur more than twice 
)* 
\z/x 

지원하지 않을 경우, 원자 그룹을 제거 할 수 있습니다 :

+0

뭔가 일반적인 것이 필요합니다. –

-2

어떤 사람들은 문제에 직면 할 때, "나는, 내가 정규 표현식을 사용합니다 알고있다."생각 이제 그들은 두 가지 문제가 있습니다. - Jamie Zawinski

정규 표현식에 적절한 문제 도메인이 아닙니다. 이 시나리오에서 작동 할 수있는 무언가를 할 수 있습니다. 네이티브 Java에서 알고리즘을 작성하면 앞으로 계속 유지하기가 쉬울 것이므로 다음 사람은 필수 암호에 대한 다음 규칙을 추가하는 방법을 결정하기 위해 일부 암호화 된 정규 표현을 해독 할 필요가 없습니다. UPPERCASE 자와 적어도 하나의 숫자 등이 있어야합니다.