【问题标题】:Can I use javascript regular expression in php as it is我可以在php中使用javascript正则表达式吗
【发布时间】:2011-02-06 23:21:21
【问题描述】:

我在 javascript 中使用正则表达式,并希望使用相同的正则表达式进行服务器端验证。我是否需要对其进行修改以使其兼容或者它会按原样运行。

如何使用 PHP 正则表达式。请提供一个小例子。

提前致谢

编辑

用于电子邮件验证

var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);

对于手机没有验证

var pattern = new RegExp(/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/);

【问题讨论】:

    标签: php javascript regex


    【解决方案1】:

    您应该使用以下函数之一 preg_match 或 preg_match_all。幸运的是,您不需要修改您的正则表达式。 PHP 正则表达式使用经典的 Perl 正则表达式,所以匹配看起来像 preg_match_all('/([a-zA-Z0-9]+)/', $myStringToBeTested, $results);

    后期编辑:

    $string="test@mail.com";
    
    if(preg_match('/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/', $string))
        echo "matches!";
    else
        echo "doesn't match!";
    

    享受吧!

    【讨论】:

      【解决方案2】:

      应该适用于大多数模式,除了转义特殊字符和反斜杠,但不能反转,php regex 具有比 javascript 类似的功能,比如后向表达式。

      javascript : /[a-z]+/
      php        : '/[a-z]+/'
      

      例如,

      var pattern = new RegExp(/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/);

      在 php 中应该是 '/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/'

      【讨论】:

        【解决方案3】:

        在 PHP 中我们使用函数preg_match。

        $email_pattern = '/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i';
        
        $phoneno_pattern = '^/\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/';
        
        if(preg_match($email_pattern,$input_email)) {
         // valid email.
        }
        
        if(preg_match($phoneno_pattern,$input_ph)) {
         // valid ph num.
        }
        

        您可以直接使用正则表达式作为函数参数,而不是使用变量。

        【讨论】:

          【解决方案4】:

          PHP 正则表达式基于 PCRE(Perl 兼容正则表达式)。 示例(查找数字):

          preg_match('/^[0-9]*$/', 'my01string');
          

          见php documentation。

          Javascript 正则表达式略有不同 (ECMA)。

          var patt1 = new RegExp("e");
          document.write(patt1.test("The best things in life are free"));
          

          请参阅here 获取比较表。

          【讨论】:

            猜你喜欢
            • 2010-09-29
            • 2013-05-23
            • 2021-06-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-18
            • 2015-03-08
            • 1970-01-01
            相关资源
            最近更新 更多