为什么人们使用regexp进行电子邮件和其他复杂的验证?

这里有很多电子邮件正则表达式问题,我真的很困惑为什么人们使用这些疯狂的钝匹配表达式,而不是一个非常简单的解析器,它将电子邮件分割成名称和域令牌,然后验证那些允许名称的有效字符(这部分没有进一步的检查)以及域名的有效字符(我想你可以添加对所有世界顶级域名(TLD)的检查,然后为国家添加另一级二级域名与这样的(即,com.uk))。

真正的问题是,tld和sld不断变化(与流行的观点相反),所以如果您计划在根名称服务器发送更改时进行所有高级别检查,则必须不断更新正则表达式。

为什么不有一个模块能够简单地验证从数据库或平面文件中提取的域,并可选地检查DNS是否匹配记录?

我在这里很认真,为什么大家都非常热衷于为此创造完美的正则表达式? 它似乎不是解决问题的适当方法......

说服我不仅可以在正则表达式中完成(并且满足每个人),而且它是比定制解析器/验证器更好的解决方案。

-亚当


他们这样做是因为他们看到“我想测试这个文本是否符合规范”,并立即想到“我知道,我将使用正则表达式!” 而没有完全理解规范的复杂性或正则表达式的局限性。 正则表达式是处理各种文本匹配任务的精彩而强大的工具,但它们并不是完成所有这些任务的完美工具,并且似乎许多使用它们的人看不到这一事实。


捕获大多数(但不是全部)常见错误的正则表达式相对容易设置和部署。 花费更长的时间来编写自定义分析器。


一旦你掌握了基本知识,使用RegExp的诱惑是非常大的。 事实上,RegExp似乎非常强大,人们自然想要开始在任何地方使用它。 我真的怀疑这里涉及到很多心理学,正如兰德尔的XKCD漫画所展示的(是的,它很有用)。

我曾经在RegExp上做过一次介绍性演讲,最重要的幻灯片提醒我们不要过度使用它。 这是使用粗体字体的唯一幻灯片。 我相信这应该更经常地完成。

每个人都会退缩!

链接地址: http://www.djcxy.com/p/92753.html

上一篇: Why are people using regexp for email and other complex validation?

下一篇: Regular expression which matches a pattern, or is an empty string