【问题标题】:Combining RegEx's结合正则表达式
【发布时间】:2014-12-16 15:47:28
【问题描述】:

我有两个正则表达式,我正在尝试组合。一种是特定于电子邮件的,另一种是检查某些特殊字符。经过一番玩弄之后,我得出了这个解决方案:

"^([-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}|[\\w\\-ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜŸäëïöüŸçÇŒœßØøÅ寿ÞþÐð _]){0,80}$"

它似乎确实检查了我需要它做什么,但例如以下内容仍然有效:abc@foo 它不会强制使用完整的电子邮件地址。

我使用的是正确的方法还是有更简单的方法来构建这个 RegEx?我正在学习正则表达式,所以所有建议都值得赞赏。

【问题讨论】:

  • ... 为什么?为什么它必须是单个正则表达式?为什么不测试一个,然后测试另一个?如果你分开做,你可以提供有用的错误信息告诉用户确切地你不喜欢他们的输入...
  • 这是一个单一的输入,所以从 UI 的角度来看,试图推断一个电子邮件地址是很麻烦的
  • 你真的需要检查“某些特殊字符”,还是所有非 ASCII 字母?
  • 是的,我继承了正则表达式的第二部分,所以它不能更改
  • <input type="email" /> 不够好?

标签: javascript jquery regex


【解决方案1】:

将乘数{0,80}移到括号内:

"^([-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}|[\\w\\-ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜŸäëïöüŸçÇŒœßØøÅ寿ÞþÐð _]{0,80})$"
//                                                                                                                      here __^^^^^^^

另外,[a-zA-Z]{2,4} 验证 TLD 真的很差,看看IANA

me@localhost 是一个有效的电子邮件地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2015-01-14
    • 2018-07-04
    • 2016-07-30
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多