![](/img/trans.png)
[英]Java PatternSyntaxException when replacing characters in a String object
[英]PatternSyntaxException when trying to validate Latin characters
我試圖驗證一些輸入,只允許拉丁字母。 為此,我正在使用下一個正則表達式:
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的三個設備上進行了測試,結果相同。
我試圖在獨立的Java 8程序中運行相同的代碼,它工作正常。
Android正則表達式文檔頁面沒有說任何不支持\\p{IsLatin}
內容。
Unicode腳本,塊,類別和二進制屬性的類
\\p{IsLatin}
拉丁文字符(腳本)
任何的想法?
我剛剛在文檔中注意到這一行(感謝@Joop指出它):
可以使用可選前綴Is指定類別:\\ p {L}和\\ p {IsL}都表示Unicode字母的類別。
似乎\\p{IsLatin}
只是\\p{Latin}
的別名。 兩者都在本機Java中工作,但只有\\p{Latin}
適用於Android (雖然Android Studio突出顯示為紅色,並警告您這是一個“未知字符類別”)。
所以現在我的驗證方法如下:
public boolean isLatinInput(String inputText) {
return inputText != null && Pattern.matches("\\p{Latin}+", inputText);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.