[英]Regex works with JavaScript but not PHP
我在我的網頁的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?
你的正則表達式的問題是它在javascript中工作 ,但你的語法在pcre中無效。
您需要考慮\\X
匹配單個Unicode字素,無論是使用組合標記編碼為單個代碼點還是多個代碼點。 正確的語法是......
/^[ \X{00c0-01ff}a-zA-Z'-]+$/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.