用于验证本地化字符串中的字母和数字的正则表达式

2022-09-03 17:37:44

我有一个本地化的输入字段。我需要使用正则表达式添加验证,它必须只采用字母和数字。如果我只使用英语,我可以使用。[a-z0-9]

截至目前,我正在使用该方法(是的,我正在迭代每个字符)来过滤掉各种语言中存在的字母表。Character.isLetterOrDigit(name.charAt(i))

有没有更好的方法可以做到这一点?是否有任何正则表达式或其他库可用于此目的?


答案 1

从Java 7开始,您可以使用Pattern.UNICODE_CHARACTER_CLASS

String s = "Müller";

Pattern p = Pattern.compile("^\\w+$", Pattern.UNICODE_CHARACTER_CLASS);
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group());
} else {
    System.out.println("not found");
}

如果没有该选项,它将无法识别“Müller”一词,而是使用Pattern.UNICODE_CHARACTER_CLASS

启用预定义字符类和 POSIX 字符类的 Unicode 版本。

有关更多详细信息,请参阅此处

您还可以在此处查看Java 7中更多Unicode信息

在这里,regular-expression.info 对Unicode脚本,属性和块的概述。

在这里看到来自 tchrist 的关于 Java 中正则表达式的警告的著名答案,包括 Java 7 的更新更改(将在 Java 8 中)


答案 2
boolean foundMatch = name.matches("[\\p{L}\\p{Nd}]*");

应该工作。

[\p{L}\p{Nd}]匹配 Unicode 字母或数字的字符。正则表达式方法确保整个字符串与模式匹配。.matches()