2013-12-21 36 views
0

我用这个正则表达式中的JavaScript我的网页,它完美地工作:正则表达式的工作原理与JavaScript,但不是PHP

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中使用“安全”?

+0

你有没有试过让你的正则表达式对u修饰符友好? '/ ^([\ u00c0- \ u01ffa-zA-Z \'\ - ])+ $/u'; – Calimero

+0

@Calimero感谢您的建议,但仍然不起作用 – supersheep97

+0

@ user2180613仍然没有快乐我害怕 – supersheep97

回答

2

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

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

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

工作完全谢谢 – supersheep97

相关问题