Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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
swift iOS应用程序中电子邮件的验证_Ios_Xcode_Swift - Fatal编程技术网

swift iOS应用程序中电子邮件的验证

swift iOS应用程序中电子邮件的验证,ios,xcode,swift,Ios,Xcode,Swift,我使用此功能验证登录表单中的电子邮件。我无法理解如何从我的文本字段中引发此事件 像这样使用 class func isValidEmail(testStr:String) -> Bool { let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" let range = testStr.rangeOfString(emailRegEx, options:.RegularExpressionSea

我使用此功能验证登录表单中的电子邮件。我无法理解如何从我的文本字段中引发此事件

像这样使用

class func isValidEmail(testStr:String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    let range = testStr.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
    let result = range != nil ? true : false
    return result
}

但在
teststr
处获取未解决的错误。我不熟悉斯威夫特。有人能告诉我怎么解决这个问题吗

您可以使用一个简单的正则表达式函数验证电子邮件,该函数返回
true
如果它有效,否则
false

您可以在用户点击键盘上的“完成/输入”事件(如
editingDidEnd
)时对其进行验证。您可以将其从故事板绑定到类文件,如

if(username.isEqualToString("") || [!LoginController, testStr == self.username]) {
    self.dismissViewControllerAnimated(true, completion: nil)
    var alertView:UIAlertView = UIAlertView()
    alertView.title = "Sign in Failed!"
    alertView.message = "Please enter valid username"
    alertView.delegate = self
    alertView.addButtonWithTitle("OK")
    alertView.show()
    return
}
可能有助于该方法易于验证


享受编码的乐趣

Swift 4.2和Xcode 10

对我来说,如果域名后面有两个以上的点,其他答案都会返回true。我找到了这个答案,它正确地处理了这种情况

@IBAction func onPressDone(sender: UITextField){
    if txtEmaildAddress.text.isEmpty {
        println("enter email address") //prompt ALert or toast
    }
    else if self.validate(txtEmaildAddress.text) {
        println("Invalid email address") // prompt alert for invalid email
    }
}

func validate(YourEMailAddress: String) -> Bool {
    let REGEX: String
    REGEX = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
    return NSPredicate(format: "SELF MATCHES %@", REGEX).evaluateWithObject(YourEMailAddress)
}
快乐编码Swift

func isValidEmail(testStr:String) -> Bool {
    let emailRegEx = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{1,4}$"
    let emailTest = NSPredicate(format:"SELF MATCHES[c] %@", emailRegEx)
    return emailTest.evaluate(with: testStr)
}
用法:

isValidEmail(“name@mail.com”

output->true

isValidEmail(“name@mail”


output->false
带Xcode 11.4的Apple Swift 5.1.3版

func isValidEmail(_ email: String) -> Bool {
    let emailRegEx = "(?:[a-zA-Z0-9!#$%\\&‘*+/=?\\^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%\\&'*+/=?\\^_`{|}" +
                     "~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" +
                     "x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-" +
                     "z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5" +
                     "]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" +
                     "9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" +
                     "-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"     
    let emailTest = NSPredicate(format:"SELF MATCHES[c] %@", emailRegEx)
    return emailTest.evaluate(with: email)
}
使用它:

extension String {
    func isEmail()->Bool {
            let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
            return  NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: self)
    }
}

这将适用于swift 4、5

扩展字符串{

 if let _textfieldText = textField.text {
            if _textfieldText.isEmail() {
                print("Okay Email go ahead")
            }else{
                print("Enter a valid email address first.")
            }
        }

}

它已经被写在很多其他类似的帖子中,但因为它不在这篇文章中,我将是那个明智地说出真相的人:

不用费心用过于复杂(错误)的正则表达式验证邮件

因为即使您的regexp是完美的,并且过滤所有可能的电子邮件地址而不出现假阴性(这会困扰您的用户),您的regexp也不会阻止任何用户输入错误

确保电子邮件地址有效的唯一方法是使用代码或验证机制向其发送邮件。因此,我建议您只需使用类似于
+@.++
的东西检查您的邮件地址,因为所有电子邮件地址都有此表单

然后,向it部门发送邮件,以确保:

  • 电子邮件地址已存在
  • 电子邮件地址是有效的
  • 用户是电子邮件地址的所有者(或者,至少可以在此时访问它)

  • 由于电子邮件地址不仅仅是语法问题,如果您必须使用有效的电子邮件地址,请确保它们不仅语法正确。

    为什么
    REGEX
    ?为什么要打破所有可能的变量命名约定<代码>您的电子邮件地址<代码>txtEmaildAddress?为什么不坚持一个单一的惯例呢?这是一个多么可怕的规则啊,它让我一下子头痛起来。不为任何人工作someone123@tc.columbia.edu
     if let _textfieldText = textField.text {
                if _textfieldText.isEmail() {
                    print("Okay Email go ahead")
                }else{
                    print("Enter a valid email address first.")
                }
            }
    
    var isValidEmail: Bool {
        let regex =  "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
        let namePredicate = NSPredicate(format: "SELF MATCHES%@", regex)
        return namePredicate.evaluate(with: self)
    }