PHP 表單 - 驗證郵件和URL
說到驗證我們就要知道正則表達式:
正則表達式
正則表達式是一種描述一段文本規(guī)則的方法,它不是精確的匹配,而是通過一些特定的符號來模糊匹配
?在PHP中,我們使用preg_match函數來執(zhí)行正則表達式的匹配,一個參數是我們的正則表達式規(guī)則,第二個參數是需要檢查的文本
?preg_match ( string $正則 , string $字符串 [, array &$結果] )
功能:根據$正則變量,匹配$字符串變量。如果存在則返回匹配的個數,把匹配到的結果放到$結果變量里。如果沒有匹配到結果返回0。
^表示開始;$表示結束
讓我們看一下代碼:
<?php header("Content-type:text/html;charset=utf-8"); //設置編碼 $str = 'date20150121'; if (preg_match('/^date/', $str)) { echo '匹配成功'; } else { echo '匹配失敗'; } ?>
上面的代碼就是匹配以date 開始的編號。匹配結果如下:
匹配成功
preg_matchede第三個參數是匹配的內容,通常我們會將一個空的數組傳遞進去,因為是傳址調用,匹配結束后,數組中會得到具體匹配的內容
實例
<?php header("Content-type:text/html;charset=utf-8"); //設置編碼 $str = 'date20150121'; if (preg_match('/^date/', $str,$mat)) { print_r($mat); } else { echo '匹配失敗'; } ?>
程序運行結果:
Array ( ? ?[0] => date )
在正則表達式中字母使用w、而數字使用d(D表示非數字)來表示
? ? + 表示一個或者多個
? ? * 表示0個或者多個
? ? ? 表示有或者沒有
? ? {n} 表示具體幾位
? ? {m, n} 表示大于m個,小于n個
就像下面這樣:
<?php header("Content-type:text/html;charset=utf-8"); //設置編碼 $name = "zhang"; // wang zhu hu ma tan if (preg_match('/an|hu/', $name, $arr)) { print_r($arr); } else { echo '匹配失敗'; } ?>
程序運行結果:
Array ( ? ?[0] => an )
使用或條件可以用來匹配字符串,如果僅僅是單個的字母或者字符,則可以使用范圍表示
使用[]可以表示一個字符的取值范圍
'/[a0.]/' 可以匹配包含了a或者0或者.的任意字符串
另外,正則表達式還可以使用-來表示一組范圍
? ?[a-z] 表示小寫的26個字母中的任意一個
? ?[A-Z] 表示一個大寫字母
? ?[0-9] 表示一位十進制數
了解了那么多,讓我們看看用正則表達式來匹配表單的內容吧。
PHP - 驗證名稱
以下代碼將通過簡單的方式來檢測 name 字段是否包含字母和空格,如果 name 字段值不合法,將輸出錯誤信息:
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z]*$/",$name)) {
??? $nameErr = "只允許字母和空格";
}
PHP - 驗證郵件
?規(guī)則:郵箱名可以是字母、數字、下劃線和點組成的任意字符;郵箱要包含@符號,后面的文字按域名規(guī)則處理
?以下代碼將通過簡單的方式來檢測 e-mail 地址是否合法。如果 e-mail 地址不合法,將輸出錯誤信息:
$email = test_input($_POST["email"]);
if (!preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/",$email)) {
??? $emailErr = "無效的 email 格式!";
}
PHP - 驗證 URL
以下代碼將檢測URL地址是否合法 (以下正則表達式運行URL中含有破折號:"-"), 如果 URL 地址不合法,將輸出錯誤信息:
$website = test_input($_POST["website"]);
if (!preg_match("/b(?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%
=~_|]/i",$website)) {
??? $websiteErr = "無效的 URL";
}
我們現在將上面所學的知識結合起來,來驗證我們表單的數據。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP中文網</title> </head> <style> .error {color: #FF0000;} </style> <body> <?php // 定義變量并設置為空值 $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "姓名是必填的"; } else { $name = test_input($_POST["name"]); // 檢查姓名是否包含字母和空白字符 if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允許字母和空格"; } } if (empty($_POST["email"])) { $emailErr = "電郵是必填的"; } else { $email = test_input($_POST["email"]); // 檢查電子郵件地址語法是否有效 if (!preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$email)) { $emailErr = "無效的 email 格式"; } } if (empty($_POST["website"])) { $website = ""; } else { $website = test_input($_POST["website"]); // 檢查 URL 地址語法是否有效(正則表達式也允許 URL 中的斜杠) if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) { $websiteErr = "無效的 URL"; } } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "性別是必選的"; } else { $gender = test_input($_POST["gender"]); } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP 驗證實例</h2> <p><span class="error">* 必需的字段</span></p> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 姓名:<input type="text" name="name"> <span class="error">* <?php echo $nameErr;?></span> <br><br> 郵箱:<input type="text" name="email"> <span class="error">* <?php echo $emailErr;?></span> <br><br> 網址:<input type="text" name="website"> <span class="error"><?php echo $websiteErr;?></span> <br><br> 評論:<textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性別: <input type="radio" name="gender" value="female">女性 <input type="radio" name="gender" value="male">男性 <span class="error">* <?php echo $genderErr;?></span> <br><br> <input type="submit" name="submit" value="提交"> </form> <?php echo "<h2>您的輸入:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> </body> </html>
我們現在如果不按上面我們所寫的規(guī)則填寫的話,會出現下面的提示:
如果你輸入的信息都正確,則會通過驗證
還能用正則表達式匹配手機號碼哦,想想手機號碼的規(guī)律吧。