2013-03-13 290 views
1

我想限制输入为用户名字段的英文字母(a-z)。有人可以帮助我添加下面的代码,不允许输入任何数字,字符和任何其他语言,而不是英文字母吗?UITextField只允许英文字母输入

现在下面的代码不允许使用空格,也不允许输入超过10个字母。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
{ 
    BOOL _isAllowed = YES; 
    NSString *nameRegex = @"[A-Za-z]+"; 
    NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex]; 

    NSString *tempString = [[textField.text stringByReplacingCharactersInRange:range withString:string] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 



    if (textField == self.usernameField) 
    { 
     if ([self.usernameField.text isEqualToString:tempString]) 
     { 
      self.title.text = @"No Spaces Allowed"; 
      self.title.textColor = [UIColor yellowColor]; 

      _isAllowed = NO; 
     } 

     else if (tempString.length > 10) 
     { 
      self.title.text = @"Username cannot be more than 10 letters."; 
      self.title.textColor = [UIColor yellowColor]; 

      _isAllowed = NO; 
     } 

修订

 else if (![nameTest evaluateWithObject:self.usernameField.text]) 
     { 
       self.title.text = @"Username can only contain english letters."; 
       self.title.textColor = [UIColor yellowColor]; 

       _isAllowed = NO; 
     } 
     return _isAllowed; 
    } 

    return _isAllowed; 
} 

感谢。

+0

它不允许使用退格键来删除第一个字符。 – Shmidt 2014-07-27 09:00:48

回答

7

你可以使用这个表达式来检查用户名只包含英文字母:

NSString *nameRegex = @"[A-Za-z]+"; 
NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex]; 

if(![nameTest evaluateWithObject:self.usernameField.text]){ 
     self.title.text = @"Username can only contain english letters."; 
     self.title.textColor = [UIColor yellowColor]; 

     _isAllowed = NO; 
} 
+0

谢谢你的回复。用你的代码,我不能输入self.usernameField。我不断收到错误“用户名只能包含英文字母”。并且没有字母出现在文本框中。我不确定我是否在正确的位置输入了它。请参阅最新的代码。谢谢。 – user1107173 2013-03-13 18:58:05

+0

你能看看这个吗? – user1107173 2013-03-14 14:45:15

+0

你在哪里使用上面的代码片段? – 2015-08-04 15:51:31

相关问题