在先前的文章中為大家帶來了《PHP表單學習之怎樣驗證表單中的必要欄位? 》,其中詳細的介紹了PHP中怎樣驗證表單中的必需字段的相關知識,本篇文章我們繼續來看一下,怎樣驗證表單中的郵件和URL。希望對大家有幫助!
在上一篇文章中我們已經了解到了怎樣去驗證必填的資訊也就是必須字段,我們需要知道在我們填寫資訊時,雖然有些資料不是必填的,但是這些資訊是有格式要求的,例如手機號碼或網址等等,這樣的資訊不能夠隨便填寫。這時候我們要怎麼樣才能完成對這種資訊的驗證呢?
這時候我們就要透過正規表示式來進行表單中的右鍵和URL資訊進行驗證了。如果對正規表示式不太清楚的話可以點選《正規表示式影片教學》進行學習。以下就簡單的跟大家介紹一下我們在驗證表單資料時會用到的正規表示式的一些知識。
正規表示式
正規表示式是一種描述一段文字規則的方法,它不是精確的匹配,而是透過一些特定的符號來模糊匹配。在PHP中,我們使用preg_match
函數來執行正規表示式的匹配,一個參數是我們的正規表示式規則,第二個參數是需要檢查的文字。
preg_match
函數的語法格式如下:
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 '匹配失败'; } ?>
輸出結果:
在正規表示式中字母使用\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 '匹配失败'; } ?>
輸出結果:
#使用或條件可以用來匹配字串,如果只是單一的字母或字符,則可以使用範圍表示,使用[]
可以表示一個字符的取值範圍'/[a0\.]/'
可以匹配包含了a或者0或.
的任意字串。
另外,正規表示式也可以使用-來表示一組範圍,[a-z]
表示小寫的26個字母中的任一個,[A-Z]
表示一個大寫字母,[0-9]
表示一位十進位數。
正規表示式了解這麼多,接下來我們就要來驗證表單的格式是否正確了。
PHP驗證名稱、郵件和URL
#名字的驗證規則是必須的,並且只能包含字母和空格。 E-mail的驗證規則是必須的,其中必須是一個有效的電子郵件地址(包含'@'和'.')。網址的驗證規則的是可選的,如果存在,它必須包含一個有效的URL。備註的驗證規則是可選的,多行輸入欄位。性別的驗證規則是必須的,必須選擇一個。
那接下來我們可以透過上述中的政策表達式來寫出以下程式碼,將透過簡單的方式來偵測name 欄位是否包含字母和空格,如果name 欄位值不合法,將輸出錯誤訊息,範例如下:
$name = test_input($_POST["name"]); if (!preg_match("/^[a-zA-Z]*$/",$name)) { $nameErr = "只允许字母和空格"; }
透過上述程式碼便能夠提示使用者姓名填寫的格式,接下來我們可以根據相同的方法來驗證郵件和URL。
邮箱名可以是字母、数字、下划线和点组成的任意字符;邮箱要包含@符号,后面的文字按域名规则处理,以下代码将通过简单的方式来检测 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 格式!"; }
以下代码将检测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>
通过上述代码,当我们没有按照我们设置的规则填写的话,输出结果如下:
当然作为扩展知识,也可以使用弹窗,只需要在上述示例中的代码做些改动,将输出的字符变成弹窗的格式,示例如下:
<!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 = "<script language=\"javascript\"> { alert(\"姓名是必填的\"); //弹出对话框 } </script>"; } else { $name = test_input($_POST["name"]); if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "<script language=\"javascript\"> { alert(\"姓名只允许字母和空格\"); //弹出对话框 } </script>"; } } if (empty($_POST["email"])) { $emailErr = "<script language=\"javascript\"> { alert(\"电邮是必填的\"); //弹出对话框 } </script>"; } else { $email = test_input($_POST["email"]); // 检查电子邮件地址语法是否有效 if (!preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$email)) { $emailErr = "<script language=\"javascript\"> { alert(\"无效email的格式\"); //弹出对话框 } </script>"; } } 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 = "<script language=\"javascript\"> { alert(\"无效的URL\"); //弹出对话框 } </script>"; } } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "<script language=\"javascript\"> { alert(\"性别是必选的\"); //弹出对话框 } </script>"; } 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>
当填写内容不按规定规则是,点击提交,输出结果如下:
如此我们便完成了PHP验证名称、邮件和URL。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
以上是PHP表單學習如何驗證表單中的郵件和URL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!