检查字符串是否严格为字母数字的正则表达式

63

如何检查一个字符串是否只包含数字和字母,即是否为字母数字混合字符串?


2
试试这个: /^[a-z0-9]+$/i也可以在这里检查 - Vimalnath
12个回答

91

如果您想检查ASCII字母数字字符,请尝试使用以下正则表达式:"^[a-zA-Z0-9]*$"。在String.matches(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

8
M42的回答更好,因为它不仅覆盖了所有字母数字字符,而且更加全面。-1则不够完整。 - tster
9
if 的使用不太好,更好的方式是 return s.matches(pattern) - Fr4nz
2
允许空字符串,使用 +,像这样:^[a-zA-Z0-9]+$ - Adnan Abdollah Zaki
1
你真的需要在开头和结尾添加边界匹配符(^,$)吗?因为使用String pattern="[a-zA-Z0-9]+";似乎会产生相同的效果,因为+是贪婪的。 - krick
需要正则表达式来检查字符串是否不包含“test”,并且只包含字母和空格。请帮忙。 - shiva
@krick 是的,你需要使用锚点 ^, $ 进行验证正则表达式。尝试在 https://regex101.com/ 等网站上测试字符串 abc@def,你就会明白为什么了。你说的 + 是贪婪的是对的,但这意味着它将匹配 abcdef 而不是懒惰的 +? 匹配的 a, b, c, d, e, f。注意:如果你没有添加 ^,$ 锚点,Java 的 String.matches() 方法会自动添加,但最好还是加上它们作为良好的习惯。 - wisbucky

28
为了与Unicode兼容:
^[\pL\pN]+$

在哪里

\pL stands for any letter
\pN stands for any number

无法工作。报错:java.util.regex.PatternSyntaxException: 索引5附近有错误的Unicode属性。 - Abdalrahman Shatou
IntelliJ还建议使用\\p{Alnum}(但这是在Java 13中)。 - Erk
@Erk 我相信这个从Java 7就已经存在了: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html - slugmandrew
@slugmandrew,好的了解。我一直在犹豫。似乎从Java 6开始就有一个。但是Java 5没有-它甚至似乎没有Pattern类。 - Erk
2023年5月在Java中可用。这是最简洁的答案,但仍然易读。(IntelliJ不建议更改。) - devdanke

17

现在是2016年或之后,情况有所改善。这与Unicode字母数字字符串匹配:

^[\\p{IsAlphabetic}\\p{IsDigit}]+$

参见文献(“用于Unicode脚本、块、类别和二进制属性的类”部分)。我也发现这个答案很有帮助。


11
请参考Pattern的文档。
假设使用US-ASCII字母表(a-z,A-Z),可以使用\p {Alnum}
检查一行是否仅包含这些字符的正则表达式是"^[\\p{Alnum}]*$"
这也匹配空字符串。要排除空字符串:"^[\\p{Alnum}]+$"

5

使用字符类:

^[[:alnum:]]*$

4
这是正确的想法,但POSIX字符类语法在Java中是无效的,而该问题被标记为Java。与您回答相当的Java语法是"^[\\p {Alnum}]*$",如下所述。 (如果此类标记不被认为是网站指南明显的话,请告诉我,我会在问题本身上添加评论。 :) ) - Mark A. Fitzgerald

4
Pattern pattern = Pattern.compile("^[a-zA-Z0-9]*$");
Matcher matcher = pattern.matcher("Teststring123");
if(matcher.matches()) {
     // yay! alphanumeric!
}

运行完美无缺! - Gaurav

1

尝试使用此 [0-9a-zA-Z]+ 表达式,以便匹配 仅含有字母和数字且至少有一个字符..

可能需要修改,请进行测试。

http://www.regexplanet.com/advanced/java/index.html

Pattern pattern = Pattern.compile("^[0-9a-zA-Z]+$");
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {

}

1

1

-1

100%字母数字正则表达式(它仅包含字母数字,甚至不包括整数和字符,只有字母数字)

例如:

特殊字符(不允许)
123(不允许)
asdf(不允许)
1235asdf(允许)


String name="^[^<a-zA-Z>]\\d*[a-zA-Z][a-zA-Z\\d]*$";

1
那么 a12 不是字母数字吗? - Ayush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接