我正在使用iPhone應用程序,並且需要確保輸入的文本僅包含a到z和數字。檢查輸入的文本是否僅使用英文字母
我不希望用戶使用其他語言的字母,如上面帶有重音或點的字母。
編輯:我是新來的這個RegEx,所以如果你請給我一個代碼或鏈接,我會非常感激。
我正在使用iPhone應用程序,並且需要確保輸入的文本僅包含a到z和數字。檢查輸入的文本是否僅使用英文字母
我不希望用戶使用其他語言的字母,如上面帶有重音或點的字母。
編輯:我是新來的這個RegEx,所以如果你請給我一個代碼或鏈接,我會非常感激。
使用正則表達式,如[0-9a-zA-Z]+
。查看Objective-C的RegexKit Framework,這是一款適用於iPhone的正則表達式庫。
然後,您可以這樣做:
NSString *str = @"abc0129yourcontent";
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"];
最簡單的方法 - 假設你想允許標點符號也是檢查所有字符是在ascii值32(空格)和126(〜)之間。 ASCII table說明了這一點。
所有重音字符都是我第一次開始編程時用來稱作「高」ascii的字符。
如果您不希望允許標點你就必須做一些範圍檢查:對數字
65大寫
48至57至90至122小寫
這可能使正則表達式的方法更具有可讀性(我不能相信我只是寫了)
還有一個方法(可能不那麼優雅與正則表達式):
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
易於實施(以上面,只是編輯的快複製粘貼):
的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
}
你讓標點符號呢? – ChrisF 2010-01-06 13:44:15
nop,不允許標點符號 – Adhamox 2010-01-06 13:53:28