Man*_*uPK 12 java regex unicode localization
我有一个本地化的输入字段.我需要使用正则表达式添加验证,它必须只使用字母和数字.[a-z0-9]如果我只使用英语,我可以使用.
截至目前,我正在使用该方法Character.isLetterOrDigit(name.charAt(i))(是的,我正在迭代每个字符)来过滤掉各种语言中的字母表.
有没有更好的方法呢?任何正则表达式或其他可用的库?
ste*_*ema 21
从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");
}
Run Code Online (Sandbox Code Playgroud)
没有选项它不会识别"Müller"这个词,而是使用 Pattern.UNICODE_CHARACTER_CLASS
启用Unicode版本的预定义字符类和POSIX字符类.
您还可以在这里查看 Java 7中的更多Unicode信息.
在这里的regular-expression.info上概述了Unicode脚本,属性和块.
请参阅tchrist关于Java 中正则表达式注意事项的一个着名答案,包括Java 7中已更改的更新(将在Java 8中更新)
boolean foundMatch = name.matches("[\\p{L}\\p{Nd}]*");
Run Code Online (Sandbox Code Playgroud)
应该管用.
[\p{L}\p{Nd}]匹配Unicode字母或数字的字符.正则表达式.matches()方法确保整个字符串与模式匹配.