关于不固定邮箱 @之后的“.”的正则表达式

2015-10-22 11:26:45 +08:00
 wikinee
最近在学习 JS ,遇到一个问题。教程里关于邮箱正则表达式都是哪种单点的。
针对复合域名,比如 xxx@abc.xyz.com 这样的如何过滤,如果不知道输入的邮箱是有一个“.”两个“.”的如何写啊
-----------
目前我只想到 xxx.[com|cn|net|us]这种固定写法
5885 次点击
所在节点    JavaScript
36 条回复
Slienc7
2015-10-22 19:58:52 +08:00
[A-Za-z0-9]+?[A-Za-z0-9\.\-]*?[A-Za-z0-9]+@[A-Za-z0-9]+?[A-Za-z0-9\.\-]*?[A-Za-z0-9]+
手写未测试 域名后缀一直增加 不可能固定 前后都可能非首末位- .
Slienc7
2015-10-22 20:01:41 +08:00
@xgowex 举个例子 aasa-sss.high.ffgg-fcuf@fcg-hgc.cgg-gvc.xn--hhuuh
注意:实际-.不可能相连 上面的 re 没有考虑到
可能中文邮箱,此处不做考虑
sss3barry
2015-10-22 23:54:05 +08:00
我们学校学生的邮箱 @mail.scut.edu.cn
第一次看到直接惊呆,域名这么长
jings
2015-10-23 00:06:22 +08:00
function isEmail(field){
return field.value.indexOf("@") !=-1&&field.value.indexOf(".") !=-1
}
KoleHank
2015-10-23 08:07:14 +08:00
据说最新标准 xxx@xxx 是合法的邮箱了,怎么办?
virusdefender
2015-10-23 08:35:53 +08:00
django 匹配邮箱的正则,你可以参考,这个都标准了吧


def validate(self, value):
value = super(EmailField, self).validate(value)
user_regex = re.compile(
r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*$"
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"$)',
re.IGNORECASE)
domain_regex = re.compile(
r'(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}|[A-Z0-9-]{2,}(?<!-))$'
# literal form, ipv4 address (SMTP 4.1.3)
r'|^\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$',
re.IGNORECASE)
domain_whitelist = ['localhost']
if '@' not in value:
raise ValidationError("Email format is not correct")

user_part, domain_part = value.rsplit('@', 1)

if not user_regex.match(user_part):
raise ValidationError("Email format is not correct")

if (domain_part not in domain_whitelist and
not domain_regex.match(domain_part)):
# Try for possible IDN domain-part
try:
domain_part = domain_part.encode('idna').decode('ascii')
if not domain_regex.match(domain_part):
raise ValidationError("Email format is not correct")
else:
return
except UnicodeError:
pass
raise ValidationError("Invalid Email format")
return value
virusdefender
2015-10-23 08:36:07 +08:00
hxndg
2015-10-23 09:18:52 +08:00
\w+@\w+(\.\w+)*\.[com|cn|net|us]
hxndg
2015-10-23 09:26:52 +08:00
leaving the enviroment,all comment is nonesense
zhhc
2015-10-23 09:35:10 +08:00
你们先试试能否匹配 abc.def@xyz.com.cn 不是我钻牛角尖
aksoft
2015-10-23 10:27:47 +08:00
解析 @后面的,匹配有个求用
18000rpm
2015-11-02 12:31:35 +08:00
小声问一句,
[com|cn|net|us] 这种是什么用法?看你们全都这么用,我 Google 了半天也没找到这种语法。

P.S. 我觉得是不是应该用圆括号 (com|cn|net|us)

@FrankFang128
@lililqth
@hxndg
hxndg
2015-11-02 12:56:31 +08:00
@18000rpm ...嗯,你可以直接搜索正则表达式大括号。用百度
hxndg
2015-11-02 12:57:27 +08:00
@18000rpm ps 括号一般两个作用,一个是做文本匹配,另一个是调整优先级
FrankFang128
2015-11-02 13:17:55 +08:00
@18000rpm 你是对的 我被楼主带沟里了
hxndg
2015-11-02 19:11:06 +08:00
@18000rpm sorry ,又想了一下,错了。应该是整体的备选。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/230118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX