【问题标题】:Email validation swift 2电子邮件验证 swift 2
【发布时间】:2016-10-23 15:29:00
【问题描述】:

如何限制用户在文本字段中输入电子邮件地址。 问题是,我的警报没有显示,只需注册而不检查电子邮件字段是否有效

if ( username.isEmpty || email.isEmpty || password.isEmpty || phonenumper.isEmpty) {

    let alert = UIAlertController(title: "Sign Up Failed!", message:"Please enter your data for Signup", preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "OK ", style: .Default) { _ in })
    self.presentViewController(alert, animated: true){}
}

else {
    if (isValidEmail(UserEmailTextFiled.text!)) {
        let alert = UIAlertController(title: "Inviled Email", message:"Please enter your Email", preferredStyle: .Alert)
        alert.addAction(UIAlertAction(title: "OK ", style: .Default) { _ in })
        self.presentViewController(alert, animated: true){}

    }else{
    //code

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

【问题讨论】:

  • 我建议您更新 isValidEmail 以将可选字符串作为参数,而不是字符串,如果它为 nil,则返回 false。它可以避免崩溃(你总是在不检查的情况下打开可选值)
  • 旁注,因为这实际上不是您问题的一部分,但我建议删除正则表达式。电子邮件地址正则表达式验证过于复杂,您可能无法考虑所有可能性。如果用户输入了无效的电子邮件,那是他们的问题,而不是你的问题。有关更深入的讨论,请参阅此博客文章:davidcel.is/posts/stop-validating-email-addresses-with-regex

标签: ios swift email-validation


【解决方案1】:

swift 3.0 中的电子邮件验证

@IBOutlet weak var emailid: UILabel!
@IBOutlet weak var MsgAlrtEmailId: UILabel!

@IBAction func Register(_ sender: Any)
    {
        //email

        let providedEmailAddress = emailid.text

        let isEmailAddressValid = isValidEmailAddress(emailAddressString: providedEmailAddress!)

        if isEmailAddressValid
        {
            print("Email address is valid")
            MsgAlrtEmailId.text = "Email Address is valid"
            MsgAlrtEmailId.sizeToFit()
            MsgAlrtEmailId.textColor = UIColor.blue

        } else {
            print("Email address is not valid")
            MsgAlrtEmailId.text = "Email Address Not valid"
            MsgAlrtEmailId.sizeToFit()
           MsgAlrtEmailId.textColor = UIColor.red
        }

  //email rule validation
        func isValidEmailAddress(emailAddressString: String) -> Bool {

            var returnValue = true
            let emailRegEx = "[A-Z0-9a-z.-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,3}"

            do {
                let regex = try NSRegularExpression(pattern: emailRegEx)
                let nsString = emailAddressString as NSString
                let results = regex.matches(in: emailAddressString, range: NSRange(location: 0, length: nsString.length))

                if results.count == 0
                {
                    returnValue = false
                }

            } catch let error as NSError {
                print("invalid regex: \(error.localizedDescription)")
                returnValue = false
            }

            return  returnValue
        }

【讨论】:

    【解决方案2】:
    public func isValidEmailAddress() -> Bool {
        let emailRegex = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"
        return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: self)
    }
    

    这是带有正则表达式的 Swift 3.0 Func。 只需复制/粘贴到您的帮助程序或扩展文件中,然后使用它。

    【讨论】:

      【解决方案3】:

      在 Swift 3.0 中

      extension  String {
      
          func nsstring () -> NSString {
              return (self as NSString)
          }
      
          func isValidEmailAddress () -> Bool
          {
      
              var returnValue = true
              let emailRegEx = "[A-Z0-9a-z.-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,3}"
              do {
                  let regex = try NSRegularExpression(pattern: emailRegEx)
      
                  let results = regex.matches(in: self.trimmingCharacters(in: .whitespacesAndNewlines), range: NSRange(location: 0, length: self.characters.count))
                  if results.count == 0
                  {
                      returnValue = false
                  }
              }
              catch let error as NSError
              {
                  print("invalid regex: \(error.localizedDescription)")
                  returnValue = false
              }
              return  returnValue
          }    
      }
      

      在 ViewController 中

      let isValidEmail = yourtextField?.text?.isValidEmailAddress()
      if isValidEmail!
      { 
       //Code Here
      }
      else
      {
       //Error Code Here
      }
      

      【讨论】:

        【解决方案4】:

        根据您发布的代码,if (isValidEmail(UserEmailTextFiled.text!)) {... 表示如果电子邮件有效,将显示无效电子邮件警报。你只需要用! if (!isValidEmail(UserEmailTextFiled.text!)) { 反转结果

        【讨论】:

          猜你喜欢
          • 2018-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-15
          • 2017-10-03
          • 1970-01-01
          • 2013-10-28
          相关资源
          最近更新 更多