用于验证本地化字符串中的字母和数字的正则表达式
2022-09-03 17:37:44
我有一个本地化的输入字段。我需要使用正则表达式添加验证,它必须只采用字母和数字。如果我只使用英语,我可以使用。[a-z0-9]
截至目前,我正在使用该方法(是的,我正在迭代每个字符)来过滤掉各种语言中存在的字母表。Character.isLetterOrDigit(name.charAt(i))
有没有更好的方法可以做到这一点?是否有任何正则表达式或其他库可用于此目的?
我有一个本地化的输入字段。我需要使用正则表达式添加验证,它必须只采用字母和数字。如果我只使用英语,我可以使用。[a-z0-9]
截至目前,我正在使用该方法(是的,我正在迭代每个字符)来过滤掉各种语言中存在的字母表。Character.isLetterOrDigit(name.charAt(i))
有没有更好的方法可以做到这一点?是否有任何正则表达式或其他库可用于此目的?
从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 中)
boolean foundMatch = name.matches("[\\p{L}\\p{Nd}]*");
应该工作。
[\p{L}\p{Nd}]
匹配 Unicode 字母或数字的字符。正则表达式方法确保整个字符串与模式匹配。.matches()