iOS TextField验证

时间:2011-10-05 17:37:31

标签: iphone objective-c ios

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

是否有任何库不能让我这么容易,所以我不必编写正则表达式。

3 个答案:

答案 0 :(得分:17)

这将检查UITextField是否有正确的10位数或更少的电子邮件和电话号码 将此方法添加到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:@".!#$%&'*+-/=?^_`{|}~@"]] 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);
}  

另外,看看这两篇文章:
Auto-formatting phone number UITextField on the iPhone
PhoneNumberFormatter

答案 1 :(得分:3)

这是确保UIViewController中的phonenumber长度的一种简单方法,它在视图中有文本字段。

- (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];
}

对于电子邮件,我想你想在失去焦点时检查正则表达式。

答案 2 :(得分:0)

这是UITextField验证的简单示例,键入键盘时其他字符不显示

String name