2

我正在开发一个 iPhone 应用程序,需要确保输入的文本仅由 a 到 z 和数字组成。

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

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

4

4 回答 4

9

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

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

NSString *str = @"abc0129yourcontent";
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"];
于 2010-01-06T13:47:25.177 回答
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
于 2010-01-06T14:09:58.797 回答
2

最简单的方法 - 假设您也想允许标点符号是检查所有字符是否在 ascii 值 32(空格)和 126(~)之间。ASCII 表说明了这一点。

当我第一次开始编程时,所有重音字符都是我们过去所说的“高”ascii。

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

数字 48 到 57

65 到 90 为大写

小写为 97 到 122

这可能会使 RegEx 方法更具可读性(我不敢相信我刚刚写了那个)

于 2010-01-06T13:46:13.917 回答
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
}
于 2016-07-29T10:15:58.977 回答