Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式不允许_Javascript_Php_Regex_Email - Fatal编程技术网

Javascript 正则表达式不允许

Javascript 正则表达式不允许,javascript,php,regex,email,Javascript,Php,Regex,Email,我需要一个自定义条件来测试用户输入。我使用Regex检查用户的输入是不是一个纯数字字符串,还是一个有效的电子邮件地址 当前的正则表达式如下所示,有效地剔除了大多数错误地址: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}

我需要一个自定义条件来测试用户输入。我使用Regex检查用户的输入是不是一个纯数字字符串,还是一个有效的电子邮件地址

当前的正则表达式如下所示,有效地剔除了大多数错误地址:

/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
/([^()[\]\\,;:\s@\“]+(\.[^()[\]\,;:\s@\“]+)*)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.[0-9]{1,3}.]$/
然而,仍有一些人错过了枪战:

  • 阿拉伯字符
  • WW。(用户输入WW。someone@hotmail.com而不是正确的someone@hotmail.com)
  • .com的拼写错误,例如.cpm、cum、xom、ccom、cim
  • 我计划添加一个测试来检查输入是否为1-3,但对于如何实现这一点,我有点不知所措。有什么建议吗?

    没有合适的“适合所有人”的解决方案,但如果排除不常见和非常尴尬的事情(如嵌入引号),则可以简化此类正则表达式(忽略大小写):

    ^[a-z](?:[\.+\-]?\w+*@[a-z]+(?:[\.\-]?\w+)*$
    
    此表达式应该与几乎所有常见的电子邮件格式匹配

    具体而言,它将实施以下限制:

    • 从一封信开始
    • 本地部分可能包括
      +
      -
      ,但它们不允许相互重复
    • 本地部分必须以字母数字字符结尾
    • 域名必须以字母数字字符开头
    • 域名可能包括
      -
      ,但不允许它们是最后一个字符
    请注意,这不会验证电子邮件地址的TLD,因为您永远无法真正包含所有的TLD(并且新的TLD会定期添加)


    如果用户提供有效的电子邮件地址真的很重要,请使用两步验证过程:注册或注册后,发送一封带有确认链接的电子邮件,将电子邮件地址标记为有效/有效。

    为什么
    ww。someone@hotmail.com
    是无效的电子邮件地址吗?可能是。但大多数时候,它是无效的,而且这个人的意思是someone@hotmail.com. 对于那些电子邮件地址中确实有www.的人,我不在乎,因为与那些错误使用www.的人相比,这只是一小部分。就个人而言,我只会使用
    \s+@\s\.\s+
    ,然后发送一封真正的电子邮件。这是判断给定电子邮件地址是否真实的唯一方法。@AmalMurali您在第二个
    \s
    之后忘记了
    +
    。对于新的TLD,我猜类似于
    name@mailcomp
    ,域名中没有任何圆点是不可能的。嗨,谢谢Mario。但我不认为这可以排除.com的错误拼写,例如.cpm、cum、xom、ccom、cim。你对这部分有什么建议吗?谢谢@user3192948:只需让用户填写两次电子邮件并进行比较。用户不太可能两次输入相同的错误。此外,确保数据库中只存储真实电子邮件地址的唯一可靠方法是发送带有确认链接的确认邮件。我是说,弗拉基米尔。poetin@whitehouse.gov将通过所有检查,但很可能是一个假地址。嗨,弗兰克,我也必须从商业角度思考。当你要求人们填写两次电子邮件地址时,注册率会下降40%,而我不能仅仅为了剔除几个虚假的电子邮件地址而将注册率降低40%。实际上,我要寻找的是一种发现.cpm、.cum等并给出警告消息的方法。@user3192948 40%?你从哪里得到那个号码的?即便如此,我认为这更多的是因为人们在发送电子邮件地址后会想到可能不需要的垃圾邮件,而不仅仅是一次确认某个文本字段。之前使用过这种方法,并测试了50000多名访问者。