[英]Java check if string only contains english keyboard letters
我想禁止用戶在他們的名字中使用任何特殊字符。 他們應該能夠使用整個英文鍵盤,所以
a-z, 0-9, [], (), &, ", %, $, ^, °, #, *, +, ~, §, ., ,, -, ', =, }{
等等。 所以他們應該被允許使用你可以用鍵盤輸入的每一個“正常”的英文字符。
我該如何檢查?
使用正則表達式將名稱與英文字母匹配。
解決方案1:
if(name.matches("[a-zA-Z]+")) {
// Accept name
}
else {
// Ask to enter again
}
解決方案2:
while(!name.matches("[a-zA-Z]+")) {
// Ask to enter again
}
// Accept name
我們可以這樣做:
String str = "My string";
System.out.println(str.matches("^[a-zA-Z][a-zA-Z\\s]+$"));//true
str = "My string1";
System.out.println(str.matches("^[a-zA-Z][a-zA-Z\\s]+$"));//false
您可以為此使用正則表達式。
由於您在正則表達式中有許多具有特殊含義的字符,因此我建議將它們放在單獨的字符串中並引用它們:
String specialCharacters = "-[]()&...";
Pattern allowedCharactersPattern = Pattern.compile("[A-Za-z0-9" + Pattern.quote(specialCharacters) + "]*");
boolean containsOnlyAllowedCharacters(String str) {
return allowedCharactersPattern.matcher(str).matches();
}
至於如何首先獲取特殊字符的字符串,目前還沒有辦法列出用戶當前的鍵盤布局可以輸入的所有字符。 事實上,因為有辦法輸入任何 Unicode 字符,所以這樣的列表無論如何都是無用的。
我覺得這個要求很奇怪,因為我看不出接受§
但不接受å
背后的理由,而且我沒有詳細檢查你想要接受的字符列表。
但是,在我看來,你要問的是接受任何代碼點值小於 0x0080 的字符,除了§
(0x00A7) 的奇怪例外。 所以我會對其進行編碼以明確地進行檢查,而不是涉及正則表達式。 我假設您想排除控制字符,即使它們可以在英文鍵盤上輸入。
偽代碼:
for each character ch in string
if ch < 0x0020 || (ch >= 0x007f && ch != `§')
then it's not allowed
不過,您的要求很奇怪,因為您想禁止“特殊字符”但允許 `.@#$%6&*()_+' 例如? 你對“特殊字符”的定義是什么?
對於“允許字符”的任意定義,我會使用 bitset。
static BitSet valid = new Bitset();
static {
valid.set('A', 'Z'+1);
valid.set('a', 'z'+1);
valid.set('0', '9'+1);
valid.set('.');
valid.set('_');
...etc...
}
然后
for (int j=0; j<str.length(); j++)
if (!valid.get(str.charAt(j))
...illegal...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.