2017-12-12 1 views
0

문자열에 적어도 하나의 문자와 한 자릿수가 포함되어 있고 최소 8 자의 특수 문자가있을 수 있는지를 검증 할 수있는 정규식 검색을 시도했습니다.Java 정규 표현식에는 적어도 하나의 문자와 한 자릿수가 필요합니다. 또한 임의의 특수 문자 허용

나는 정규식 아래에 시도하지만

  • 한 자리
  • 문자를 하나
  • @ 및

    확인 - 특수 기호

    (?=(?:.*[a-zA-Z]){1,})(?=(?:.*[@-]){0,})(?=(?:.*[0-9]){1,})^[[email protected]]*$ 
    

그러나 나는 어떤을 허용 할 수 있습니다 원하는 특수 문자 (특수 문자는 선택 사항이지만 적어도 하나의 문자와 한 자리 숫자의 무 st가 거기에 있습니다.)

답변

3

정규식을 사용하지 마십시오. 그냥 문자로 문자 문자열을 반복하는 것이 더 쉽습니다 :

boolean foundDigit = false; 
boolean foundLetter = false; 
for (int i = 0; i < str.length(); ++i) { 
    if (Character.isDigit(c)) { foundDigit = true; } 
    else if (Character.isLetter(c)) { foundLetter = true; } 
} 
return str.length() >= 8 && foundDigit && foundLetter; 

"옵션 특수 문자"의 요구 사항은 당신이 문자열이 특정 문자를 포함 할 수 있음을 지정하지 않기 때문에, 확인 할 필요 것 같다을, 그리고 거기에있을 필요는 없습니다.

+0

와우! 훌륭합니다. 나는 그 해결책이 그렇게 단순 할 수 있다고 생각조차하지 않았다. +1 –

1

@Andy 터너 사용하지만 스트림과 동일한 논리 :

public static boolean validiate(String str){ 
    return str.chars().count() >7 && 
      str.chars().filter(c->Character.isLetter(c)).count()>1 && 
      str.chars().filter(c->Character.isDigit(c)).count()>1; 
} 
+0

스트림이 좋지만 안드로이드 개발에 사용할 수 없습니다. –

+1

원래 질문과 관련이 없지만 Android 개발에서 스트림을 사용하고 싶다면이 기사 [https://medium.com/@nicopasso/java-8-stream-on-android-c629e4237d5f]를 살펴볼 필요가 있습니다. (https://media.com/@nicopasso/java-8-stream-on-android-c629e4237d5f)에서 [https://github.com/aNNiMON/Lightweight-Stream-API](https://github .com/aNNiMON/경량 스트림 API). – Eritrean

관련 문제