UITextField只接受英文字母,数字和特殊字符

时间:2016-05-10 06:49:43

标签: ios objective-c validation uitextview nsregularexpression

我正在尝试将textview字符限制为英语。但是,如果我复制并粘贴非英文字符,我的textview将获取这些条目。任何人都可以帮我解决这个问题。 UITextView应该只采用英文字符(包括特殊字符,数字和空格)。或者当我点击完成时如果textview包含非英文字符,它应该验证并向我发送错误消息。

提前致谢。

以下是我的代码

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        if(textField == yourTextField)
        {
            NSCharacterSet *invalidCharSet = [[[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"] invertedSet] invertedSet];
            NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
            return [string isEqualToString:filtered];
        }
        else
            return YES;
    }

此代码不允许我输入空格和特殊字符。需要帮助来解决这个问题。

2 个答案:

答案 0 :(得分:0)

//我希望它对你有用

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if(textField == yourTextField)
    {
        NSCharacterSet *s = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_!@#$%^&*()-+="];
       s = [s invertedSet];
      NSRange r = [string rangeOfCharacterFromSet:s];
    if (r.location != NSNotFound) {
 // alert code here
  return NO;

} else {
   return YES;
}

    }
    else
        return YES;
}

答案 1 :(得分:0)

我想(还没试过)你可以getCharacters: string并迭代它们,然后在你允许的字符集上调用characterIsMember:来验证每一个。{1}}。如果有任何失败,则返回NO