我可以在php中使用javascript正则表达式吗?

时间:2010-04-12 11:18:33

标签: php javascript regex

我在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})$/);

4 个答案:

答案 0 :(得分:3)

假设适用于大多数模式,除了转义特殊字符和反斜杠,但没有反向,php正则表达式具有的功能比javascript更像是看后面的表达式。

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

例如,

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

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

答案 1 :(得分:3)

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

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

请参阅php documentation

Javascript regexp略有不同(ECMA)。

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

有关比较表,请参阅here

答案 2 :(得分:2)

您应该使用以下功能之一preg_matchpreg_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!";

享受!

答案 3 :(得分:1)

在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.
}

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