2016-11-28 65 views
1

我有一個正在測試的驗證我的註冊表單的正則表達式,正則表達式在幾天前完美工作,現在突然間,即使我匹配正確的客戶端和通過(相同的正則表達式)形式的正則表達式,然後服務器端正在吐出else語句,說我每次都不匹配正則表達式。任何線索傢伙?我的Regex突然不工作了?

$usern = $_POST['username']; 
$regex = '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}'; 

$Access = preg_match($regex, $usern); 

if($Access) 
{ 
    //database stuff here 
} 
else 
{ 
    echo "You filled the form out incorrectly!"; 
} 
+1

使用'$ regex ='〜^(?=。* \ d)(?=。* [az])(?=。* [AZ])。{3,}〜';' - 您忘記了分隔符。一開始就有一個主播是個好主意。 –

+0

你是一個嚮導先生,我欠你一大筆時間,因爲我坐在那裏盯着我的代碼困惑和困惑,嘗試,測試和工作謝謝你 –

回答

0

的主要問題是缺少分隔符,但作爲最佳實踐,它也是一個好主意,添加^錨:

$regex = '~^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}~'; 

驗證的正則表達式通常在頭腦裏principle of contrast建,和你的正則表達式是當你重寫它像

$regex = '~^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{3,}~'; 

所以更高效,正則表達式會(中),驗證輸入速度更快,而不冗餘backtra在視圖中由.*引起的結果。

+0

很高興它爲你工作。如果我的回答對你有幫助,請考慮upvoting(參見[如何在堆棧溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) 。 15分之後,你有權在SO上進行投票。 –