正则表达式适用于JavaScript,但不适用于PHP

时间:2013-12-21 15:13:47

标签: javascript php regex

我在我的网页的JavaScript中使用了这个正则表达式,它运行得很好:

var nameRegex = /^([ \u00c0-\u01ffa-zA-Z'\-])+$/;
return nameRegex.test(name);

然后我希望将它包含在我的PHP脚本中作为第二个屏障,以防用户禁用JavaScript等。但每当我使用它时,它将失败我通过它的每个字符串,甚至正确的名称。 我尝试使用单引号来停止转义字符,但后来我不得不逃避正则表达式中包含的单引号,并想出了这个:

$nameRegex = '/^([ \u00c0-\u01ffa-zA-Z\'\-])+$/';
if ($firstName == ""){
    $valSuccess = FALSE;
    $errorMsgTxt .= "Please enter your first name<br>\n";
} elseif (!preg_match($nameRegex, $firstName)){
    $valSuccess = FALSE;
    $errorMsgTxt .= "Please enter a valid first name<br>\n";
}

但是,再一次,它没有有效的名字。

所以我的问题是,如何让我的正则表达式“安全”用于PHP?

1 个答案:

答案 0 :(得分:2)

您的正则表达式的问题在于,但您的语法在中无效。

您需要考虑与单个Unicode字素匹配的\X,无论是使用组合标记编码为单个代码点还是多个代码点。正确的语法是..

/^[ \X{00c0-01ff}a-zA-Z'-]+$/