如何仅获取一个域的验证电子邮件地址的正则表达式?

how to obtain a regular expression for validation email address for one domain ONLY?

我正在努力编写一个正则表达式来验证一个域的电子邮件地址。

我有这个表情

[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}

但问题是,例如 hello@gmail.com.net 是有效的,我只想只对一个域有效。因此,我不希望 hello@gmail.com.net 有效。

需要帮助。谢谢!

您可以使用类似的东西:

\b[A-Z0-9a-z._%+-]+@gmail\.com\.net\b

Regex Demo

试试这个 [A-Z0-9a-z._%+-]+@[A-Za-z0-9-]+\.[A-Za-z]{2,64}。 在您的正则表达式中,@.

后面允许的字符中有一个点

我为 Swift 找到了这个正则表达式:

[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}

它有一个额外的反斜杠。

我在这里找到的:http://emailregex.com/

此致,

梅勒

我知道你已经接受了答案,但我只是想到了这个想法。您可以使用 URLComponents 将电子邮件地址拆分为 userhost 并分别验证每个组件:

func validate(emailAddress: String) -> Bool {
    guard let components = URLComponents(string: "mailto://" + emailAddress),
        let host = components.host else
    {
        return false
    }

    return host.components(separatedBy: ".").count == 2
}

print(validate(emailAddress: "hello@gmail.com"))        // true
print(validate(emailAddress: "hello@gmail.com.net"))    // false
print(validate(emailAddress: "hello"))                  // false

你的要求有一个很大的缺陷:有效域可以有两个点,比如 someone@bbc.co.ukGetting a regex pattern 验证电子邮件很难。例如,Gmail 会将发送到 jsmith+abc@gmail.com 的所有电子邮件定向到与 jsmith@gmail.com 相同的收件箱。最好的方法是对电子邮件地址执行一些基本检查,然后向用户发送电子邮件并要求他们单击 link 以确认电子邮件。

您可以尝试以下模式。

/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@((REPLACE_THIS_WITH_EMAIL_DOMAIN+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;

例如

/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@((gmail+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;