【发布时间】:2017-12-21 10:17:05
【问题描述】:
我正在尝试验证一些只允许使用拉丁字母的输入。为此,我正在使用下一个正则表达式:
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 进行编译。我已经在三台装有 Android 6、7 和 8 的设备上对其进行了测试,结果相同。
我尝试在 standalone Java 8 program 中运行相同的代码,它运行良好。
Android regex doc 页面没有说明不支持 \p{IsLatin}。
Unicode 脚本、块、类别和二进制属性的类
\p{IsLatin}拉丁脚本字符(脚本)
有什么想法吗?
【问题讨论】:
-
有趣,你可以试试
\\p{L}(字母)而不是\\p{IsL}(拉丁文)。也许"(?u)\\p{IsLatin}+". -
\p{Latin}有效!非常感谢 Joop :) ..我花了一天时间试图让它工作..