我有一个带有3个UITextFields(用户名,电子邮件和密码)的视图控制器。
我需要一个首先检查的方法,如果所有字段都包含文本,那么检查电子邮件的文本字段是否是有效的电子邮件,可以通过检查它是否有@
标志。任何人都可以帮忙吗?
答案 0 :(得分:6)
以下代码用于使用Regex(常规表达)检查电子邮件ID的验证。
(BOOL) validateEmail: (NSString *) candidate {
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; // return 0;
return [emailTest evaluateWithObject:candidate];
}
答案 1 :(得分:5)
这将检查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;
if ([[textField.text componentsSeparatedByString:@"@"] count] > 1) {
unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".-"]] invertedSet];
} else {
unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".!#$%&'*+-/=?^_`{|}~@"]] invertedSet];
}
return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1);
}
要检查文本字段是否为空,只需在视图控制器中的任何位置使用if (myTextField.text.length > 0) {}
。
答案 2 :(得分:5)
我使用了Mimit的解决方案,但修改了emailRegex以允许更长的名称,如博物馆。所以最后的大括号现在说{2,6}不是{2,4}。我用更长的名字测试它,它的工作原理。感谢Mimit提供简单的解决方案。
-(BOOL) validateEmail: (NSString *) candidate {
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; // return 0;
return [emailTest evaluateWithObject:candidate];
}
答案 3 :(得分:3)
试试这个: -
if(![emailTextField.text isEqualToString:@""] && ![userNameTextField.text isEqualToString:@""] && ![passwordTextField.text isEqualToString:@""])
{
NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
//Valid email address
if ([emailTest evaluateWithObject:emailTextField.text] == YES)
{
}
else
{
//not valid email address
}
}
else
{
//any of the text field is empty
}
答案 4 :(得分:0)
如果您的目标是iOS 4.0或更高版本,您可能还会考虑NSRegularExpression,并在this的行中对UITextField内容进行更细微的检查。