2013-03-13 176 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