正则表达式逻辑的差异

时间:2014-10-23 10:11:59

标签: regex email-validation

在我的网站上,我使用以下正则表达式验证电子邮件。

^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$

我的怀疑是:

  1. 我可以使用以下正则表达式来实现相同的功能吗?

    ^[a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+.[a-z]{2,4}$
    
  2. 我之所以这样问,我试着研究其含义。所以我感到困惑

    [a-zA-Z0-9_.-]涵盖[a-zA-Z0-9][a-zA-Z0-9_-]

  3. 的所有实例

    我不确定这一点,因为我是初学者。

    我从

    获得正则表达式

    http://regexlib.com/

    我在http://regex101.com/#pcre检查了两个正则表达式。我发现结果没有任何区别。可能是因为我的知识有限

    请澄清一下。感谢所有提前

1 个答案:

答案 0 :(得分:5)

也许它不是你想要的答案,但我不得不说我最终会进行这种电子邮件验证:^.+@.+\..{2,}$修剪后。

检查什么?存在一些符号,@本身,一些其他符号,点,以及顶级域的至少两个符号。它说" Dude,应该有一封电子邮件,而不是你热闹的用户名"。这就足够了,我猜。

顺便说一下,.[a-z]{2,4}$是检查TLD的一个巨大错误,因为很少有热门域超过4个符号(即.travel)和a lot of less popular ones

为什么我认为您不需要详细验证?首先,无论如何你都会错过there are a lot of requirements。您知道电子邮件地址中允许使用西里尔符号吗?

而且,请想一想这个验证你想要什么?避免错误的电子邮件?你赢了。有人会输入一封符合您所有要求的电子邮件,但无论如何它都是不正确的。 email@gmial.com是一个好人吗?不会。它会被regexp检查吗?我很害怕,答案是" no"再一次。

因此,最好解释用户应提供有效的电子邮件以获取确认邮件并进行解释"如果您不是那位在mysite.com注册的人,请只是忽略这封信"在电子邮件文本中。

因为regexp永远不会过滤掉,但是你可能因为它而丢失了一些奇怪的电子邮件地址的用户。


因为这应该是你问题的答案:

  1. 它不会是相同的功能,但两个正则表达式都远非完美。
  2. long regexp检查登录中的第一个符号不能是点,短划线或下划线,最后一个符号不应该是一个点,而其他符号可能是,但要避免登录可能更短的事实超过3个符号。短正则表达式更好(=更简单),但它不符合上述要求。
  3. 因此,如果您想使用您的变体,请从中移除4。如果你需要原始逻辑,你就不能缩短它。
  4. 使用以下示例可能会发现差异:.mail@mail.coma@gmail.comgmail@a.com