我需要一种方法来确保电话号码有10个数字,没有其他字符,即() - 并确保电子邮件地址是有效的电子邮件(格式正确)。iOS TextField验证
有没有任何图书馆不能让我这么容易,所以我不必写正则表达式。
我需要一种方法来确保电话号码有10个数字,没有其他字符,即() - 并确保电子邮件地址是有效的电子邮件(格式正确)。iOS TextField验证
有没有任何图书馆不能让我这么容易,所以我不必写正则表达式。
这将检查一个正确的电子邮件和电话号码10位或更少的UITextField。
将此方法添加到textFields delegate,然后检查是否应添加要更改的字符。
返回YES
或NO
取决于文本字段,有多少个字符在它目前是,它希望增加哪些字符:
#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。
下面是确保在视图中包含文本字段的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];
}
的电子邮件要对证,当它失去焦点一个正则表达式,我想。
这里有一个的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;
}
}
看起来不错,我还没有看到文本字段委托。 – sunkencity
chown,这个工程很好,但似乎并没有处理删除关键事件。如果手机> = 10,则返回NO,因此在删除后不会更改 – spentak
哦,您说的没错。用if(textField.text.length + string.length> 10)替换if(textField.text.length> = 10)' – chown