0
誰能告訴我,什麼在此代碼是錯誤的:PregMatch。空間和@?
if ((!preg_match("[a-zA-Z0-9 \.\s]", $username)) || (!preg_match("[a-zA-Z0-9 \.\s]", $password)));
exit("result_message=Error: invalid characters");
}
?
誰能告訴我,什麼在此代碼是錯誤的:PregMatch。空間和@?
if ((!preg_match("[a-zA-Z0-9 \.\s]", $username)) || (!preg_match("[a-zA-Z0-9 \.\s]", $password)));
exit("result_message=Error: invalid characters");
}
?
有幾件事情是錯誤的。我假設你正在尋找的代碼是:
if (preg_match('~[^a-z0-9\h.]~i', $username) || preg_match('~[^a-z0-9\h.]~i', $password))
exit('result_message=Error: invalid characters');
你的代碼有什麼問題?
模式[a-zA-Z0-9 \.\s]
是多種原因錯誤:
/
,但你可以看到,我已經選擇~
。例如:/[a-zA-Z \.\s]/
\s
。國際海事組織,檢查用戶名或密碼,你只需要空間,爲什麼不是標籤,但不是回車或換行字符!您可以刪除\s
並放置空間,也可以使用與所有水平空白匹配的\h
字符類。 /[a-zA-Z\h\.]/
(如果你不希望允許標籤,用空格代替\h
)/[a-zA-Z\h.]/
+
和錨點開始^
和結尾$
的字符串。例如∕^[a-zA-Z0-9\h.]+$/
細i
縮短字符類:/^[a-z0-9\h.]+$/i
但有而不是用!
您的preg_match的斷言和測試,如果所有字符否定一個更快的方法,在您想要的字符範圍內,您只能測試字符串中是否有一個您不想要的字符。要做到這一點,你只需要通過在第一位置插入一個^
否定字符類:
preg_match('/[^a-z0-9\h.]/i', ...
(注意^
有內部和字符類之外有不同的含義。如果^
不在字符類的開始,它是一個簡單的文字字符)。
+1建設性,很好的提出和完整的答案。 –