java regex match for alphanumeric string

蹲街弑〆低调 提交于 2019-12-25 18:34:53

问题


I am trying to check whether a password is alphanumeric or not using regex but I am not getting the result I expect. What is the problem with the below code?

boolean passwordOnlyAlphaNumericCheck = false;
Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]$");
Matcher matcherAlphaNumericCheck = patternAlphaNumericCheck.matcher(login.getPassword());
if(matcherAlphaNumericCheck.find())
  passwordOnlyAlphaNumericCheck = true;

Thanks for help


回答1:


You need to add a quantifier that suits your requirements: * - 0 or more occurrences or + - 1 or more occurrences. You can also omit the ^ and $ and use String.matches():

boolean passwordOnlyAlphaNumericCheck = false;
if(login.getPassword().matches("[a-zA-Z0-9]*"))
  passwordOnlyAlphaNumericCheck = true;

To match all Unicode letters, use \p{L} class (and perhaps, \p{M} to match diacritics): "[\\p{L}\\p{M}0-9]+".

what is the difference between login.getPassword().matches("[0-9a-zA-Z]*"); and login.getPassword().matches("[0-9a-zA-Z]");?

The .matches("[0-9a-zA-Z]") will only return true if the whole string contains just 1 digit or letter. The * in [0-9a-zA-Z]* will allow an empty string, or a string having zero or more letters/digits.




回答2:


Your pattern will only match strings with one alphanumeric character, since you have no quantifier and match explicitly from start (^) to end ($).

Append + for 1+ matches, or * for 0+ matches to your character class.

You can also use the script: \\p{Alnum} instead of a tedious character class.

For instance:

  • ^\\p{Alnum}{8}$ will match a String made of 8 alphanumeric characters
  • ^\\p{Alnum}{8,}$ will match a String made of 8 or more alphanumeric characters
  • ^\\p{Alnum}{8,10}$ will match a String made of 8 to 10 alphanumeric characters
  • ^\\p{Alnum}+$ will match a String made of 1 or more alnums
  • ^\\p{Alnum}*$ will match an empty String or a String made of any number of alnums



回答3:


use this regex expression Take a Demo Here For Regex

"^[a-zA-Z0-9]*$ " Or "^[a-zA-Z0-9]+$"

instead of

"^[a-zA-Z0-9]$ // * or + should be added at last 

So, This might work to you

Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]*$");

OR

Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]+$");



回答4:


Try this regexp:

private final String nonAlphanumericRegex = ".*\\W.*";
if (Pattern.matches(nonAlphanumericRegex, YOUR_STRING))
    throw IllegalArgumentException()


来源:https://stackoverflow.com/questions/37070161/java-regex-match-for-alphanumeric-string

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!