【发布时间】:2012-06-29 19:10:27
【问题描述】:
如何检查字符串是否仅包含数字和字母,即。是字母数字吗?
【问题讨论】:
-
试试这个:/^[a-z0-9]+$/i 也检查 [这里][1] [1]:stackoverflow.com/questions/388996/…
标签: java regex alphanumeric
如何检查字符串是否仅包含数字和字母,即。是字母数字吗?
【问题讨论】:
标签: java regex alphanumeric
使用字符类:
^[[:alnum:]]*$
【讨论】:
"^[\\p{Alnum}]*$",如 below 所述。 (如果网站指南认为此类标记不够显眼,请告诉我,我会在问题本身中添加评论。:))
查看Pattern的文档。
假设 US-ASCII 字母(a-z、A-Z),您可以使用 \p{Alnum}。
检查一行是否仅包含此类字符的正则表达式是"^[\\p{Alnum}]*$"。
这也匹配空字符串。排除空字符串:"^[\\p{Alnum}]+$"。
【讨论】:
考虑到您要检查 ASCII 字母数字字符,试试这个:
"^[a-zA-Z0-9]*$"。在String.matches(Regex)中使用这个RegEx,如果字符串是字母数字则返回true,否则返回false。
public boolean isAlphaNumeric(String s){
String pattern= "^[a-zA-Z0-9]*$";
return s.matches(pattern);
}
如果有帮助,请阅读本文以了解有关正则表达式的更多详细信息:http://www.vogella.com/articles/JavaRegularExpressions/article.html
【讨论】:
if不好用,最好是return s.matches(pattern)
String pattern="[a-zA-Z0-9]+"; 的行为方式相同,因为 + 是贪婪的。
Pattern pattern = Pattern.compile("^[a-zA-Z0-9]*$");
Matcher matcher = pattern.matcher("Teststring123");
if(matcher.matches()) {
// yay! alphanumeric!
}
【讨论】:
试试这个 [0-9a-zA-Z]+ only alpha and num with one char at-least..
可能需要修改,所以测试一下
http://www.regexplanet.com/advanced/java/index.html
Pattern pattern = Pattern.compile("^[0-9a-zA-Z]+$");
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {
}
【讨论】:
为了兼容 unicode:
^[\pL\pN]+$
在哪里
\pL stands for any letter
\pN stands for any number
【讨论】:
\\p{Alnum}(但这是在 Java 13 中)
现在是 2016 年或更晚,事情有了进展。这匹配 Unicode 字母数字字符串:
^[\\p{IsAlphabetic}\\p{IsDigit}]+$
参见the reference(“Unicode 脚本、块、类别和二进制属性的类”部分)。还有 this answer 我觉得很有帮助。
【讨论】:
100% 字母数字 RegEx(它仅包含字母数字,甚至不包含整数和字符,仅包含字母数字)
例如:
特殊字符(不允许)
123(不允许)
asdf(不允许)
1235asdf(允许)
String name="^[^<a-zA-Z>]\\d*[a-zA-Z][a-zA-Z\\d]*$";
【讨论】:
a12 不是字母数字?
要检查字符串是否为字母数字,您可以使用遍历字符串中的每个字符并检查它是否为字母数字的方法。
public static boolean isAlphaNumeric(String s){
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(!Character.isDigit(c) && !Character.isLetter(c))
return false;
}
return true;
}
【讨论】:
如果你也想包含外文字母,你可以试试:
String string = "hippopotamus";
if (string.matches("^[\\p{L}0-9']+$")){
string is alphanumeric do something here...
}
或者,如果您想允许特定的特殊字符,但不允许其他任何字符。比如#或者space,你可以试试:
String string = "#somehashtag";
if(string.matches("^[\\p{L}0-9'#]+$")){
string is alphanumeric plus #, do something here...
}
【讨论】:
要考虑所有 Unicode 字母和数字,可以使用 Character.isLetterOrDigit。在 Java 8 中,这可以与 String#codePoints 和 IntStream#allMatch 结合使用。
boolean alphanumeric = str.codePoints().allMatch(Character::isLetterOrDigit);
【讨论】:
要包含[a-zA-Z0-9_],您可以使用\w。
所以myString.matches("\\w*")。 (.matches 必须匹配整个字符串,所以不需要^\\w*$。.find 可以匹配子字符串)
https://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
【讨论】: