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
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.
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]+$");
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 Try this regexp:
private final String nonAlphanumericRegex = ".*\\W.*";
if (Pattern.matches(nonAlphanumericRegex, YOUR_STRING))
throw IllegalArgumentException()
This function will help ensure that you have just alphanumeric as wanted.
public static boolean isAlphanumeric(String value){
if (isValueEmpty(value)) {
return false;
}
return value.matches("^[a-zA-Z_0-9]*$");
}
public static boolean isValueEmpty(String param){
return param == null || param.isEmpty();
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.