有许多的电子邮件正则表达式的问题突然出现了这里,我老老实实困惑,为什么人们在使用这些疯狂钝匹配的表达,而不是一个非常简单的解析器,拆分电子邮件成名称和域的令牌,然后验证那些反对名称允许的有效字符(此部分无法进一步检查)和域名的有效字符(我想您可以添加对所有世界TLD的检查,然后为国家/地区添加另一级别的二级域名用这样的(即com.uk)).
真正的问题是tlds和slds不断变化(与普遍看法相反),因此如果您计划在根名称服务器发送更改时进行所有这些高级别检查,则必须不断更新正则表达式.
为什么没有一个模块可以简单地验证从数据库或平面文件中提取的域,并可选择检查DNS是否匹配记录?
我在这里很认真,为什么每个人都如此热衷于为此发明完美的正则表达式?它似乎不是解决问题的合适方法......
说服我不仅可以在regexp中做(并满足每个人),但它是一个比自定义解析器/验证器更好的解决方案.
-亚当
他们这样做是因为他们看到"我想测试这个文本是否符合规范",并立即想"我知道,我会使用正则表达式!" 没有完全理解规范的复杂性或正则表达式的局限性.正则表达式是处理各种文本匹配任务的一个很棒的强大工具,但它们并不是完成所有这些任务的完美工具,似乎许多使用它们的人都忽视了这一事实.
捕获大多数(但不是全部)常见错误的正则表达式相对容易设置和部署.编写自定义解析器需要更长的时间.
一旦掌握了基础知识,使用RegExp的诱惑就非常大.事实上,RegExp似乎非常强大,以至于人们自然希望在任何地方开始使用它.我真的很怀疑,有很多心理这里涉及到,由兰德尔作为证明XKCD漫画(是的,这是非常有用).
我曾经对RegExp做了一次介绍性介绍,最重要的幻灯片警告过度使用它.这是唯一使用粗体字体的幻灯片.我相信这应该更频繁地完成.