簡體   English   中英

檢查字符串是否只包含拉丁字符?

[英]Check String whether it contains only Latin characters?

問候,

我正在開發GWT應用程序,用戶可以用日語輸入他的詳細信息。 但'userid'和'password'應該只包含英文字符(拉丁字母)。 如何驗證字符串?

你可以使用String#matches()和一個正則表達式 拉丁字符由\\w覆蓋。

所以這應該做:

boolean valid = input.matches("\\w+");

順便說一句,這也包括數字和下划線_ 不確定是否有害。 否則你可以只使用[A-Za-z]+

如果你想要覆蓋變音符號 (ä,é,ò等等,那些符號也是拉丁字符),那么你需要先將它們標准化,然后在匹配之前去除變音符號,因為沒有(記錄在案的)正則表達式,涵蓋了變音符號。

String clean = Normalizer.normalize(input, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
boolean valid = clean.matches("\\w+");

更新 :Java中有一個沒有文檔的正則表達式,它也涵蓋了變音符號, \\p{L}

boolean valid = input.matches("\\p{L}+");

以上工作在Java 1.6。

public static boolean isValidISOLatin1 (String s) {
    return Charset.forName("US-ASCII").newEncoder().canEncode(s);
} // or "ISO-8859-1" for ISO Latin 1

有關參考,請參閱Charset上文檔

可能有更好的方法,但您可以使用您認為可接受的字符加載集合,然后針對該集合檢查用戶名/密碼字段中的每個字符。

偽:


foreach (character in username)
{
    if !allowedCharacters.contains(character)
    {
        throw exception
    }
}

對於這個簡單的事情,我會使用正則表達式。

private static final Pattern p = Pattern.compile("\\p{Alpha}+");

static boolean isValid(String input) {
  Matcher m = p.matcher(input);
  return m.matches();
}

還有其他預定義的類,如\\w ,可能會更好。

我成功地結合了user232624, Joachim SauerTvaroh的答案:

static CharsetEncoder asciiEncoder = Charset.forName("US-ASCII"); // or "ISO-8859-1" for ISO Latin 1

boolean isValid(String input) {    
    return Character.isLetter(ch) && asciiEncoder.canEncode(username);
}

有我的解決方案,它的工作非常好

public static boolean isStringContainsLatinCharactersOnly(final String iStringToCheck)
{
    return iStringToCheck.matches("^[a-zA-Z0-9.]+$");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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