gpt4 book ai didi

java - 尝试验证拉丁字符时出现 PatternSyntaxException

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:52 24 4
gpt4 key购买 nike

我正在尝试验证一些只允许使用拉丁字母的输入。为此,我正在使用下一个正则表达式:

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} 不受支持。

Classes for Unicode scripts, blocks, categories and binary properties
\p{IsLatin} A Latin script character (script)

有什么想法吗?

最佳答案

我刚刚注意到 docs 中的这一行(感谢@Joop 指出):

Categories may be specified with the optional prefix Is: Both \p{L} and \p{IsL} denote the category of Unicode letters.

看来\p{IsLatin}只是\p{Latin}的别名。两者都适用于 native Java,但只有 \p{Latin} 适用于 Android(尽管 Android Studio 将其突出显示为红色并警告您这是“未知字符类别”)。

所以现在我的验证方法是这样的:

public boolean isLatinInput(String inputText) {
return inputText != null && Pattern.matches("\\p{Latin}+", inputText);
}

关于java - 尝试验证拉丁字符时出现 PatternSyntaxException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47922686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com