2013-12-21 73 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

相關問題