正则表达式逻辑的差异

Aru*_*run -1 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}$
Run Code Online (Sandbox Code Playgroud)

我的怀疑是:

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

    ^[a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+.[a-z]{2,4}$
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我问这个的原因是,我试着研究其含义.所以我感到很困惑

    [a-zA-Z0-9_.-][a-zA-Z0-9]和覆盖所有实例[a-zA-Z0-9_-]

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

我得到了正则表达式

http://regexlib.com/

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

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

Smi*_*eek 5

也许这不是你要找的答案,但我不得不说我最终得到了这种电子邮件验证:^.+@.+\..{2,}$修剪之后.

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

顺便说一句,.[a-z]{2,4}$检查TLD是一个巨大的错误,因为很少有流行的域超过4个符号(即.travel)和许多不太受欢迎的域.

为什么我认为您不需要详细验证?首先,无论如何,你会有很多要求.您知道电子邮件地址中允许使用西里尔符号吗?

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

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

因为正则表达式永远不会过滤掉,但是由于它,你可能会因为奇怪的电子邮件地址而失去一些用户.


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

  1. 它不会是相同的功能,但两个正则表达式都远非完美.
  2. 长regexp检查登录中的第一个符号不能是点,短划线或下划线,最后一个符号不应该是点,而其他符号可能是,但要避免登录可能短于3个符号.短正则表达式更好(=更简单)但它不符合上面提到的要求.
  3. 因此,如果您想使用您的变体,只需4从中移除即可.如果您需要原始逻辑,则不能缩短它.
  4. 差异可能利用这些例子中找到:.mail@mail.com,a@gmail.com,gmail@a.com