我正在努力编写一个正则表达式来验证只有一个域的电子邮件地址。
我有这个表达
[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}
但问题是,例如hello@gmail.com.net
是有效的,我只希望仅对一个域有效。所以我不希望hello@gmail.com.net
有效。
需要帮助。谢谢!
答案 0 :(得分:2)
试试这个[A-Z0-9a-z._%+-]+@[A-Za-z0-9-]+\.[A-Za-z]{2,64}
。
在你的正则表达式中是@。
答案 1 :(得分:0)
答案 2 :(得分:0)
我为Swift找到了这个正则表达式:
[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}
它有一个额外的反斜杠。
我在这里找到了它:http://emailregex.com/
此致
Melle的
答案 3 :(得分:0)
我知道你已经接受了答案,但这个想法只是让我想到了。您可以使用URLComponents
将电子邮件地址拆分为user
和host
,并分别验证每个组件:
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.uk
。 Getting 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;