Iphone 有没有办法让文本字段输入必须是电子邮件?(在xcode中)
我想做一个用户登录表单,它需要使用电子邮件,而不仅仅是用户名。如果不是电子邮件,我有没有办法弹出警报?顺便说一句,所有这些都在xcode中。有一种使用and的方法: 然后,如果电子邮件地址错误,您可以显示警报:Iphone 有没有办法让文本字段输入必须是电子邮件?(在xcode中),iphone,mysql,objective-c,xcode,ios4,Iphone,Mysql,Objective C,Xcode,Ios4,我想做一个用户登录表单,它需要使用电子邮件,而不仅仅是用户名。如果不是电子邮件,我有没有办法弹出警报?顺便说一句,所有这些都在xcode中。有一种使用and的方法: 然后,如果电子邮件地址错误,您可以显示警报: - (void)checkEmailAndDisplayAlert { if(![self validateEmail:[aTextField text]]) { // user entered invalid email address UIAl
- (void)checkEmailAndDisplayAlert {
if(![self validateEmail:[aTextField text]]) {
// user entered invalid email address
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Enter a valid email address." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
[alert release];
} else {
// user entered valid email address
}
}
我在我的应用程序中做了类似的事情,我验证了email address字段有两个部分用“@”符号分隔,至少有两个部分用“.”符号分隔。这不会检查它是否是有效的电子邮件地址,但至少会确保它的格式正确。代码示例:
// to validate email address, just checks for @ and . separators
NSArray *validateAtSymbol = [[emailRegisterTextField text] componentsSeparatedByString:@"@"];
NSArray *validateDotSymbol = [[emailRegisterTextField text] componentsSeparatedByString:@"."];
// checks to make sure entries are good (email valid, username available, passwords enough chars, passwords match
if ([passwordRegisterTextField text].length >= 8 &&
[passwordRegisterTextField text].length > 0 &&
[[passwordRegisterTextField text] isEqual:[passwordVerifyRegisterTextField text]] &&
![currentUser.userExist boolValue] &&
![[emailRegisterTextField text] isEqualToString:@""] &&
([validateAtSymbol count] == 2) &&
([validateDotSymbol count] >= 2)) {
// get user input
NSString *inputEmail = [emailRegisterTextField text];
NSString *inputUsername = [userNameRegisterTextField text];
NSString *inputPassword = [passwordRegisterTextField text];
NSString *inputPasswordVerify = [passwordVerifyRegisterTextField text];
NSLog(@"inputEmail: %@",inputEmail);
NSLog(@"inputUsername: %@",inputUsername);
NSLog(@"inputPassword: %@",inputPassword);
NSLog(@"inputPasswordVerify: %@",inputPasswordVerify);
// attempt create
[currentUser createUser:inputEmail username:inputUsername password:inputPassword passwordVerify:inputPasswordVerify];
}
else {
NSLog(@"error");
[errorLabel setText:@"Invalid entry, please recheck"];
}
如果出现错误,您可以弹出一个警报,但我选择显示一个带有错误消息的
UILabel
,因为它对用户来说似乎不那么刺耳。在上面的代码中,我检查了电子邮件地址的格式、密码长度以及密码(输入两次以进行验证)是否匹配。如果所有这些测试均未通过,则应用程序不会执行该操作。当然,您可以选择要验证的字段……我想与大家分享一下我的示例。这种方法对我很有效
1.检查字符串只有一个@
2.检查至少有一个。之后@
2.之后没有任何空间@
-(BOOL)checkEmailString :(NSString*)email{
//DLog(@"checkEmailString = %@",email);
BOOL emailFlg = NO;
NSArray *atArr = [email componentsSeparatedByString:@"@"];
//check with one @
if ([atArr count] == 2) {
NSArray *dotArr = [atArr[1] componentsSeparatedByString:@"."];
//check with at least one .
if ([dotArr count] >= 2) {
emailFlg = YES;
//all section can't be
for (int i = 0; i<[dotArr count]; i++) {
if ([dotArr[i] length] == 0 ||
[dotArr[i] rangeOfString:@" "].location != NSNotFound) {
emailFlg = NO;
}
}
}
}
return emailFlg;
}
-(BOOL)checkEmailString:(NSString*)电子邮件{
//DLog(@“checkEmailString=%@”,电子邮件);
BOOL emailFlg=否;
NSArray*atArr=[电子邮件组件由字符串分隔:@“@”];
//和一个核对一下@
如果([atArr计数]==2){
NSArray*dotArr=[atArr[1]由字符串分隔的组件:@“;
//请至少与一名员工联系。
如果([dotArr计数]>=2){
emailFlg=是;
//不能将所有部分都删除
为了(inti=0;i用现代代码更新这篇文章,我想根据原始objective-c答案发布快速答案会很好
// MARK: Validate
func isValidEmail(email2Test:String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
let range = email2Test.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
let result = range != nil ? true : false
return result
}
是的,将aTextField
替换为您的textField的名称。别忘了您必须在某处调用[self-checkEmailAndDisplayAlert]
。@user613231:很高兴我能帮上忙。;)如果用户输入,myemail@domain..com,它说这是一封有效的电子邮件,但它不是,有没有办法解决这个问题?您还可以进一步简化最后两行,使其返回范围=nil?true:false
// MARK: Validate
func isValidEmail(email2Test:String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
let range = email2Test.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
let result = range != nil ? true : false
return result
}