簡體   English   中英

嘗試驗證拉丁字符時出現PatternSyntaxException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM