Delphi 正则表达式匹配有效邮箱需支持+字符问题求解
正则存在的问题
你当前使用的正则中,@符号前的用户名匹配规则[_a-zA-Z\d\-\.]+没有包含+字符,因此无法识别带+的合法邮箱(例如user+tag@domain.com这类格式都会匹配失败)。
修复方案
最简修改
直接在@前的字符集里加入+即可满足需求,修改后的代码如下:
TRegEx.Create('[+_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+', [roIgnoreCase, roSingleline])
注:
+放在字符集[]中不需要转义,直接写入即可生效。
更严谨的可选修改
如果需要避免匹配到+user@domain.com、user++tag@domain.com这类不符合邮箱命名规范的格式,可以将用户名部分的规则调整为禁止+出现在开头、结尾,且不允许连续出现多个+,对应完整代码如下:
TRegEx.Create('[a-zA-Z\d_\-.]+(?:\+[a-zA-Z\d_\-.]+)*@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+', [roIgnoreCase, roSingleline])
内容的提问来源于stack exchange,提问作者WayOfTheWright
相关产品推荐
相关产品推荐

