问题
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]*");
andlogin.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 aString
made of 8 alphanumeric characters^\\p{Alnum}{8,}$
will match aString
made of 8 or more alphanumeric characters^\\p{Alnum}{8,10}$
will match aString
made of 8 to 10 alphanumeric characters^\\p{Alnum}+$
will match aString
made of 1 or more alnums^\\p{Alnum}*$
will match an emptyString
or aString
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