检查输入的文本是否仅使用英文字母

时间:2010-01-06 13:42:18

标签: iphone sdk alphanumeric

我正在开发一个iPhone应用程序,需要确保输入的文本只包含一个到z和数字。

我不希望用户使用其他语言字母,例如上面带有重音符号或点的字母。

编辑:我是这个RegEx的新手,所以如果你能给我一个代码或链接,我将非常感激。

4 个答案:

答案 0 :(得分:9)

使用正则表达式,例如[0-9a-zA-Z]+。查看目标C的RegexKit Framework,这是一个适用于iPhone的正则表达式库。

然后您可以执行以下操作:

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

答案 1 :(得分:3)

另一种方法(可能不像RegEx那么优雅):

    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

答案 2 :(得分:2)

最简单的方法 - 假设你想要允许标点符号,那就是检查所有字符是否在ascii值32(空格)和126(〜)之间。 ASCII table说明了这一点。

当我第一次开始编程时,所有重音字符都是我们以前称之为“高”的字符。

如果您不想允许标点符号,则必须进行多次范围检查:

数字

48到57

大写

65到90

小写

97到122

这可能会使RegEx方法更具可读性(我简直不敢相信我写的那样)

答案 3 :(得分:0)

易于实施(从上面开始,仅针对快速复制粘贴进行编辑):

<强>目标-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
}