当前位置: 首页 > 知识库问答 >
问题:

根据正则表达式,电子邮件验证错误

能正青
2023-03-14
//MARK: isValidEmailID
    func isValidEmail(testStr:String) -> Bool {
        print("validate emilId: \(testStr)")
        let emailRegEx = "^(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?(?:(?:(?:[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+(?:\\.[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+)*)|(?:\"(?:(?:(?:(?: )*(?:(?:[!#-Z^-~]|\\[|\\])|(?:\\\\(?:\\t|[ -~]))))+(?: )*)|(?: )+)\"))(?:@)(?:(?:(?:[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)(?:\\.[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)*)|(?:\\[(?:(?:(?:(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))\\.){3}(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))))|(?:(?:(?: )*[!-Z^-~])*(?: )*)|(?:[Vv][0-9A-Fa-f]+\\.[-A-Za-z0-9._~!$&'()*+,;=:]+))\\])))(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?$"
        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        let result = emailTest.evaluateWithObject(testStr)
        return result
    }
func isValidEmailID(email: String) -> Bool {
        let regExPattern: String = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
        let emailValidator: NSPredicate = NSPredicate(format: "SELF MATCHES %@", regExPattern)
        let isValid: Bool = emailValidator.evaluateWithObject(email)
        return isValid
    }

所以,我发现“name@.com.com”是一个有效的电子邮件地址,还有更多类似这样的子域。所以现在我希望用户不要进入子域。是否有任何REGEX验证电子邮件地址只在一个域,如“name@gmail.com”,而不是多个域或子域。

我也尝试了不同的google Regex并将其实现到项目中,但出现了同样的问题。
请帮我一下。
谢谢

共有1个答案

华星剑
2023-03-14

不要推倒重来:

不是推倒重来:Swift中的电子邮件验证

基本上,您可以使用nsdatadetector来完成繁重的工作,使所有内容保持一致,并更新到它在macOS和iOS中的工作方式。不仅如此,您还可以避免regex头痛。

// Simplifying the example from the website a bit

import Foundation

func validate(_ text: String) -> Bool {
  let types = NSTextCheckingResult.CheckingType.link.rawValue
  guard
    let dataDetector = try? NSDataDetector(types: types),
    let match = dataDetector
      .matches(in: text, options: [], range: NSRangeFromString(text))
      .first,
    let absoluteString = match.url?.absoluteString
    else { return false }
  return absoluteString == "mailto:\(text)"
}

validate("test@gmail.com")  // -> true
validate(" test@gmail.com") // -> false
 类似资料:
  • 问题内容: 有人可以向我解释这个Java Regex吗? 此正则表达式用于验证 电子邮件地址 。 问题答案: 如今,验证电子邮件地址被认为是一种不好的做法(停止使用regex验证电子邮件地址),尤其是使用问题中的表达式时。例如,这是一个更完整的表达式。 至于此表达式,我们将其分为几部分: 匹配字符串的开头 匹配列表中的至少一个字符 非捕获(请参阅backreference)组,可以重复0..n次,

  • 问题内容: 我正在使用以下正则表达式 它接受#@#.com作为有效电子邮件。我应该使用什么模式? 问题答案: 您应该使用apache- commons电子邮件验证程序。您可以从此处获取jar文件。 这是一个简单的用法示例:

  • 我需要一个带有特殊字符的正则表达式电子邮件验证。 规则: 本地部分可能有2个或更多字符长度 本地部分包含特殊字符 当前正则表达式: 测试模式: 我需要一个正则表达式,它将验证为:

  • 问题内容: 首先,我知道不建议使用正则表达式发送电子邮件,但我必须对此进行测试。 我有这个正则表达式: 在Java中,我这样做: 但是,无论电子邮件是否格式正确,正则表达式都会失败。Eclipse内部的“查找并替换”功能可以在同一个正则表达式下正常运行。 任何想法? 问题答案: FWIW,这是我们用来验证电子邮件地址的Java代码。正则表达式非常相似: 工作相当可靠。

  • 问题内容: 多年来,我慢慢地开发了一个正则表达式,假设它们不使用IP地址作为服务器部件,则可以正确验证MOST电子邮件地址。 我在几个PHP程序中使用了它,并且大多数时候都可以使用。但是,有时会遇到某个使用它的站点出现问题的人与我联系,最终我不得不进行一些调整(最近我意识到我不允许使用4个字符的TLD)。 您已经或看到的用于验证电子邮件的最佳正则表达式是什么? 我已经看到了几种使用使用几个较短表达

  • 问题内容: 我对正则表达式非常陌生。我正在用PHP开发一个项目,我需要验证电子邮件地址。在该网站和Google中搜索后,我发现以下正则表达式表示效果最好。 但是当我使用它时,我得到了错误提示, 此代码有什么问题? 问题答案: 使用它代替正则表达式: 不建议使用正则表达式来验证电子邮件地址,因为它肯定不是一件很漂亮的事情,特别是如果您不希望排除具有有效的电子邮件地址(根据RFC822语法是正确的)的