我正在尝试验证一些只允许拉丁字母的输入。为此,我使用以下正则表达式:
public boolean isValidInput(String inputText) {
return inputText != null && Pattern.matches("\\p{IsLatin}+", inputText);
}
但是当我运行它时,我得到了一个PatternSyntaxException异常:
FATAL EXCEPTION: main
Process: com.test, PID: 27758
java.util.regex.PatternSyntaxException: U_ILLEGAL_ARGUMENT_ERROR
\p{IsLatin}+
at java.util.regex.Pattern.compileImpl(Native Method)
at java.util.regex.Pattern.compile(Pattern.java:411)
at java.util.regex.Pattern.<init>(Pattern.java:394)
at java.util.regex.Pattern.matches(Pattern.java:424)
...
我正在使用Java 8并使用Android SDK 27进行编译。我已经在三个安卓设备上测试了它,分别是安卓6、7和8,在这些设备上运行的结果相同。
我尝试在独立的Java 8程序中运行相同的代码,它可以正常工作。
Android regex doc页面没有说明\p{IsLatin}
不受支持。
有关Unicode脚本、块、类别和二进制属性的类
\p{IsLatin}
拉丁字符(脚本)
有什么想法吗?
\\p{L}
(字母)代替\\p{IsL}
(是否为拉丁文)。也许应该用"(?u)\\p{IsLatin}+"
。 - Joop Eggen\p{Latin}
可以使用!非常感谢 Joop :) ..我花了一天时间尝试让它工作.. - David Miguel