回答
對此,您可以使用String#matches()
和regex。拉丁字符覆蓋\w
。
因此它應該做的事:
boolean valid = input.matches("\\w+");
這順便也涵蓋了數字和下劃線_
。不知道這是否有害。否則,您可以改用[A-Za-z]+
。
如果你還想覆蓋diacritical characters(ä,é,ò等等,這些都是每個定義也是拉丁字符),那麼你需要先對它們進行歸一化,並在匹配之前擺脫變音標記因爲沒有(記錄)正則表達式,它涵蓋了變音符號。
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。
'\ p {L}'記錄在案:http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html#ubc – 2010-01-07 13:08:09
Drat,你是對的。我會發誓,我從未在API文檔中見過多年。你是Sun API文檔的維護者嗎? – BalusC 2010-01-07 13:20:21
不,但我已經通過特定的JavaDoc頁面閱讀的次數比我想承認的要多;-) – 2010-01-07 16:59:50
可能有更好的方法,但是您可以使用任何您認爲可以接受的字符來加載集合,然後檢查用戶名/密碼字段中的每個字符與該集合。
僞:
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
可能會更好地工作。
public static boolean isValidISOLatin1(String s) { return Charset.forName("US-ASCII").newEncoder().canEncode(s); } // or "ISO-8859-1" for ISO Latin 1
僅供參考,請參閱documentation。
我不會使用它,因爲這允許輸入包含空格和控制字符(包括U + 0000),這幾乎肯定不會在用戶名中受到歡迎。 – 2010-01-07 13:09:19
你忘記了在字符集上調用'newEncoder()'。 – Tvaroh 2013-10-01 10:40:07
增加了一個對newEncoder的調用 – 2017-02-05 18:25:06
我成功地使用組合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.]+$");
}
- 1. 檢查字符串是否只包含指定的字符
- 2. 檢查一個字符串是否只包含特殊字符
- 3. 檢查字符串是否包含字(不是子字符串!)
- 4. 檢查是否字符串包含「HTTP://」
- 5. 檢查行是否包含字符串
- 6. 如何檢查字符串是否只包含英文字母?
- 7. F#檢查一個字符串是否只包含數字
- 8. React-Native:檢查字符串是否包含字符串
- 9. 檢查字符串是否不包含其他字符串
- 10. Applescript:檢查一個字符串是否包含空字符串?
- 11. 檢查字符串是否包含子字符串
- 12. 查找字符串是否包含字
- 13. 如何檢查字符串是否包含C#中的字符?
- 14. 檢查字符串是否包含python中的特殊字符
- 15. 檢查字符串是否包含數字和符號
- 16. 如何檢查字符串是否包含某個字符?
- 17. 檢查一對字符串是否包含相同的字符?
- 18. 檢查字符串是否包含for循環的字符?
- 19. 檢查2個字符串是否包含相同的字符?
- 20. 如何檢查是否字符串包含數字符號
- 21. Java:檢查字符串是否包含多個字符
- 22. 檢查字符串是否包含新行字符
- 23. 檢查字符串包含Unicode字符
- 24. 檢查字符串包含的字符
- 25. 如何檢查一個字符串是否只包含特定字符
- 26. PHP - 如何檢查一個字符串是否只包含小寫字符?
- 27. 檢查字符串是拉丁字母還是西里爾文
- 28. 檢查一個字符串是否包含數字和字母
- 29. 檢查字符串是否包含字母數字
- 30. PHP檢查字符串是否包含一些字母/數字
有英文字符?!?!我認爲英文中的字符來自拉丁字母。 – 2009-12-16 02:38:02
好,如果他的意思是ascii字符,那麼我會打電話給英文字符..或美國人。 – 2009-12-16 02:40:41