2011-10-05 77 views
7

我需要一种方法来确保电话号码有10个数字,没有其他字符,即() - 并确保电子邮件地址是有效的电子邮件(格式正确)。iOS TextField验证

有没有任何图书馆不能让我这么容易,所以我不必写正则表达式。

回答

17

这将检查一个正确的电子邮件和电话号码10位或更少的UITextField。
将此方法添加到textFields delegate,然后检查是否应添加要更改的字符。
返回YESNO取决于文本字段,有多少个字符在它目前是,它希望增加哪些字符:

#define ALPHA     @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
#define NUMERIC     @"1234567890" 
#define ALPHA_NUMERIC   ALPHA NUMERIC 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSCharacterSet *unacceptedInput = nil; 
    switch (textField.tag) { 
     // Assuming EMAIL_TextField.tag == 1001 
     case 1001: 
      if ([[textField.text componentsSeparatedByString:@"@"] count] > 1) 
       unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".-"]] invertedSet]; 
      else 
       unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".!#$%&'*+-/=?^_`{|}[email protected]"]] invertedSet]; 
      break; 
     // Assuming PHONE_textField.tag == 1002 
     case 1002: 
      if (textField.text.length + string.length > 10) { 
       return NO; 
      } 
      unacceptedInput = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 
      break; 
     default: 
      unacceptedInput = [[NSCharacterSet illegalCharacterSet] invertedSet]; 
      break; 
    } 
    return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1); 
} 

此外,检查出这2篇:
Auto-formatting phone number UITextField on the iPhone
PhoneNumberFormatter

+0

看起来不错,我还没有看到文本字段委托。 – sunkencity

+0

chown,这个工程很好,但似乎并没有处理删除关键事件。如果手机> = 10,则返回NO,因此在删除后不会更改 – spentak

+0

哦,您说的没错。用if(textField.text.length + string.length> 10)替换if(textField.text.length> = 10)' – chown

3

下面是确保在视图中包含文本字段的UIViewController中的数字长度的一种简单方法。

- (void)valueChanged:(id)sender 
{ 
    if ([[[self phoneNumberField] text] length] > 10) { 
     [[self phoneNumberField] setText:[[[self phoneNumberField] text] 
      substringToIndex:10]]; 
    } 
} 

- (void) viewWillAppear:(BOOL)animated 
{ 
    [[self phoneNumberField] addTarget:self 
          action:@selector(valueChanged:) 
          forControlEvents:UIControlEventEditingChanged]; 
} 

的电子邮件要对证,当它失去焦点一个正则表达式,我想。

0

这里有一个的UITextField验证简单的例子,而在键盘其它字符类型不显示

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
//UITextField *tf_phonenumber,*tf_userid; 
if (textField.text<=10) { 
char c=*[string UTF8String]; 
if (tf_phonenumber==textField)  //PhoneNumber /Mobile Number 
{ 
    if ((c>='0' && c<='9')||(c==nil)) { 
     return YES; 
    } 
    else 
     return NO; 
} 
if (tf_userid==textField)   //UserID validation 
{ 
    if ((c>='a' && c<='z')||(c>='A' && c<='Z')||(c==' ')||(c==nil)) { 
     return YES; 
    } 
    else 
     return NO; 
} 
    return YES; 
} 
else{ 
    return NO; 
} 
}