2010-01-06 158 views
1

我正在使用iPhone應用程序,並且需要確保輸入的文本僅包含a到z和數字。檢查輸入的文本是否僅使用英文字母

我不希望用戶使用其他語言的字母,如上面帶有重音或點的字母。

編輯:我是新來的這個RegEx,所以如果你請給我一個代碼或鏈接,我會非常感激。

+0

你讓標點符號呢? – ChrisF 2010-01-06 13:44:15

+0

nop,不允許標點符號 – Adhamox 2010-01-06 13:53:28

回答

9

使用正則表達式,如[0-9a-zA-Z]+。查看Objective-C的RegexKit Framework,這是一款適用於iPhone的正則表達式庫。

然後,您可以這樣做:

NSString *str = @"abc0129yourcontent"; 
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"]; 
2

最簡單的方法 - 假設你想允許標點符號也是檢查所有字符是在ascii值32(空格)和126(〜)之間。 ASCII table說明了這一點。

所有重音字符都是我第一次開始編程時用來稱作「高」ascii的字符。

如果您不希望允許標點你就必須做一些範圍檢查:對數字

65大寫

48至57至90至122小寫

這可能使正則表達式的方法更具有可讀性(我不能相信我只是寫了)

3

還有一個方法(可能不那麼優雅與正則表達式):

NSCharacterSet* tSet = [NSCharacterSet characterSetWithCharactersInString: 
       @"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"]; 
    NSCharacterSet* invSet = [tSet invertedSet]; 
    NSString* legalS = @"abcdA1"; 
    NSString* illegalS = @"asvéq1"; 

    if ([legalS rangeOfCharacterFromSet:invSet].location != NSNotFound) 
     NSLog(legalS); // not printed 

    if ([illegalS rangeOfCharacterFromSet:invSet].location != NSNotFound) 
     NSLog(illegalS); // printed 
+1

我也喜歡這個解決方案。謝謝 – Adhamox 2010-01-06 15:05:29

+0

你是缺席'W'和'w'!!!!!!!!!! – 2013-03-14 08:49:55

+0

@OrArbel,確實是一個恥辱:(謝謝你糾正 – Vladimir 2013-03-14 08:57:04

0

易於實施(以上面,只是編輯的快複製粘貼):

的Objective-C:

BOOL onlyEnglishAlphanumerical = ([self.textField.text rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet]].location == NSNotFound); 
self.textField.layer.borderWidth = (onlyEnglishAlphanumerical) ? 0 : 1; 
if (onlyEnglishAlphanumerical) 
{ 
    //Do the deal 
} 

斯威夫特:

if (self.textField.text.rangeOfCharacterFromSet(NSCharacterSet.init(charactersInString:"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet) == nil) 
{ 
    //Do the deal 
} 
相關問題