【问题标题】:Same regex for client-side and server-side validation客户端和服务器端验证的相同正则表达式
【发布时间】:2014-05-14 16:31:53
【问题描述】:

我正在尝试找出我的客户端 Javascript 正则表达式是否

/^(([^<>()[\]\\.,;:\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,}))$/

对于电子邮件验证(我使用它只是为了确保电子邮件格式正确,而不是作为主要验证方法)将在服务器端使用 PHP。

我不确定是否可以使用相同的语言,即使两种语言都使用基于 Perl 的正则表达式语法。感谢您的帮助。

【问题讨论】:

  • 您不需要正则表达式来验证 php 中的电子邮件地址:php.net/manual/en/function.filter-input.php
  • @MarcellFülöp 最快的测试方法是什么?我还没有写PHP脚本。
  • 您是想说您没有能力在该服务器上进行测试,还是需要一种测试方式?查看regexr.com 以验证您的结果(仅使用正则表达式)。注意:您的正则表达式比验证电子邮件地址所需的复杂。
  • @Signus 我决定用这个代替 /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9- ]+(\.[a-z0-9-]{2,})+$/ 它似乎适用于 JS 和 PHP。感谢您的链接。

标签: javascript php regex email pcre


【解决方案1】:

您应该能够使用相同的语法。 你应该使用 preg_match(String $pattern, String $email[, array $matches]) 用你的模式。如果给定,它将所有匹配项放入数组 $matches 中。 如果找到匹配项,则返回 true。特别是对于电子邮件,它总是 使用其他人的功能更好,因为例如 "$@us" 是有效的 电子邮件地址

【讨论】:

    【解决方案2】:

    此正则表达式在 JavaScript 和 PHP 中的工作方式几乎相同。有一些微小的差异,例如\s 匹配 PHP 中的“下一行”控制字符 U+0085,但在 JavaScript 中不匹配,但在这种情况下它们不太重要(无论如何,在电子邮件中允许换行符和制表符是不寻常的地址 - 为什么不使用简单的空格而不是通用的空格速记 \s)。

    如果您必须定期进行此类比较/转换,我衷心建议您查看RegexBuddy,它可以通过单击在不同口味之间转换正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2011-10-17
      • 2012-01-23
      • 2010-09-11
      相关资源
      最近更新 更多