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

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中更新)


Tim*_*ker 9

boolean foundMatch = name.matches("[\\p{L}\\p{Nd}]*");
Run Code Online (Sandbox Code Playgroud)

应该管用.

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