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

时间:2017-05-02 21:42:35

标签: regex swift email-validation nsregularexpression

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

我有这个表达

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

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

需要帮助。谢谢!

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您可以使用以下内容:

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

enter image description here

Regex Demo

答案 2 :(得分:0)

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

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

它有一个额外的反斜杠。

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

此致

Melle的

答案 3 :(得分:0)

我知道你已经接受了答案,但这个想法只是让我想到了。您可以使用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相同的收件箱。最好的方法是对电子邮件地址执行一些初步检查,然后通过电子邮件发送给用户并要求他们点击链接以确认电子邮件。

答案 4 :(得分:0)

您可以尝试以下模式。

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

例如

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