簡體   English   中英

Preg_match在不應該觸發時觸發

[英]Preg_match triggering when it shouldn't

好的,我正在使用以下代碼(其中$password = post password變量)。 這是大型表單驗證代碼的一部分,這行代碼似乎在它不應該觸發時觸發。 我擔心它的某些部分已被棄用。 我嘗試輸入pass123APassword121Password ,它們都會觸發此代碼。 為什么?

elseif(preg_match("/^[a-zA-Z0-9]$/", $password) == 0)
echo('Error - the password can only contain alpha-numeric chars!');
preg_match("/^[a-zA-Z0-9]$/", $password)

...只會匹配單個字符密碼。

preg_match("/^[a-zA-Z0-9]*$/", $password)

......應該更好。

也許我應該注意,這也將匹配一個密碼,但我假設您分別檢查長度。

編輯:如果由於SQL不安全而限制密碼,你應該真正轉換到PDO或MySQLi並使用參數化查詢,這將允許你存儲任何字符串而無需特殊處理特殊字符(如' ),這將使SQL成為可能在您的網站上更安全。

此外,如果你以明文形式存儲密碼,你應該考慮散列它們:)

你可以這樣使用: +$

if (...)
   // do anything
elseif(!preg_match("/^[a-zA-Z0-9]+$/", $password))
   echo('Error - the password can only contain alpha-numeric chars!');

使用+$代替*$

*允許空字符串。 如果$password發送為空,則不匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM