[英]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。
可能有更好的方法,但您可以使用您認為可接受的字符加載集合,然后針對該集合檢查用戶名/密碼字段中的每個字符。
偽:
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 Sauer和Tvaroh的答案:
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.