Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 有没有办法让文本字段输入必须是电子邮件?(在xcode中)_Iphone_Mysql_Objective C_Xcode_Ios4 - Fatal编程技术网

Iphone 有没有办法让文本字段输入必须是电子邮件?(在xcode中)

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

我想做一个用户登录表单,它需要使用电子邮件,而不仅仅是用户名。如果不是电子邮件,我有没有办法弹出警报?顺便说一句,所有这些都在xcode中。

有一种使用and的方法:

然后,如果电子邮件地址错误,您可以显示警报:

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