表單提交前的伺服器端驗證是安全防線關鍵。本文提供兩個實戰正則:RFC 兼容的郵箱驗證、強制含字母與數字的 6-16 位密碼驗證。
<?php
$pattern = "/^[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.[a-zA-Z]{2,4}$/i";
if (!preg_match($pattern, $email)) {
echo "郵箱不符合規則";
}
^[0-9a-zA-Z_-]+:本地部分開頭,允許字母數字、底線、連字號(\.[0-9a-zA-Z_-]+)*:允許以點分隔的多段@:必須包含單一 @[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*:網域名段落\.[a-zA-Z]{2,4}$:頂級域 2-4 字母(如 .com, .info)/i:大小寫不敏感注意:此正則覆蓋常見格式,但 RFC 5322 完整規範極其複雜,生產環境建議搭配 filter_var($email, FILTER_VALIDATE_EMAIL) 雙重驗證。
<?php
// 至少 1 個字母 + 1 個數字,長度 6-16 位,僅允許字母數字
$pa = "/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$/";
if (!preg_match($pa, $pwd)) {
echo "密碼不符合規則";
}
^(?![0-9]+$):否定前瞻,排除純數字(?![a-zA-Z]+$):否定前瞻,排除純字母[0-9A-Za-z]{6,16}$:僅允許字母數字,長度 6-16<?php
function validateEmail($email) {
return (bool)preg_match(
"/^[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.[a-zA-Z]{2,4}$/i",
$email
);
}
function validatePassword($pwd) {
return (bool)preg_match(
"/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$/",
$pwd
);
}
// 使用範例
if (!validateEmail($_POST['email'])) die('郵箱格式錯誤');
if (!validatePassword($_POST['pwd'])) die('密碼需含字母數字,6-16 位');
password_hash() + password_verify()