我有以下reg表达式,当用户输入英语时工作正常。 但是在使用葡萄牙语字符时总是会失败。
Pattern p = Pattern.compile("^[a-zA-Z]*$");
Matcher matcher = p.matcher(fieldName);
if (!matcher.matches())
{
....
}
有没有办法让模式对象识别有效的葡萄牙语字符,例如ÁÂÃÀÇÉÊÍÓÔÕÚç....?
由于
答案 0 :(得分:5)
它应该与"^\p{IsAlphabetic}*$"
一起使用,它考虑了Unicode字符。有关参考,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 1 :(得分:5)
您需要一个与所有字母字母的类匹配的正则表达式。在世界上所有的脚本中,都有加载,但幸运的是我们可以告诉Java 6的RE引擎我们正在写一封信,它会使用Unicode类的神奇来完成其余的工作。特别是,L
类匹配所有类型的字母,上部,下部和“哦,这个概念不适用于我的语言”:
Pattern p = Pattern.compile("^\\p{L}*$");
// the rest is identical, so won't repeat it...
在阅读docs时,请记住,如果放在Java文本中,则需要将反斜杠加倍,以便阻止Java编译器将它们解释为其他内容。 (另请注意,RE不适合验证人名,这是一个完全不同且更加困难的问题。)
答案 2 :(得分:3)
查看Pattern文档,特别是关于Unicode的部分:
Unicode块和类别使用\ p和\ P编写 像Perl一样构造。如果输入具有属性,则\ p {prop}匹配 如果输入具有该属性,则\ P {prop}不匹配。 使用前缀In指定块,如InMongolian中所示。分类 可以使用可选前缀Is:Both \ p {L}和\ p {IsL}指定 表示Unicode字母的类别。块和类别可以 在字符类的内部和外部使用。
(适用于Java 1.4.x)。我怀疑你有兴趣识别Unicode字母而不是特别是葡萄牙字母?