検証と言えば、正規表現について知る必要があります。
正規表現
正規表現は、テキストの一部のルールを記述する方法です。完全一致ではありませんが、完全に一致します。あいまい一致する特定の記号
PHP では、preg_match 関数を使用して正規表現マッチングを実行します。1 つのパラメーターは正規表現ルールで、2 番目のパラメーターはチェックする必要があるテキストです
preg_match ( string $normal, string $string[, array &$result])
関数: $register 変数に基づいて $string 変数を照合します。存在する場合は、一致の数を返し、一致した結果を $result 変数に入れます。結果が見つからない場合は 0 が返されます。
^ は始まりを意味します; $ は終わりを意味します
コードを見てみましょう:
<?php header("Content-type:text/html;charset=utf-8"); //设置编码 $str = 'date20150121'; if (preg_match('/^date/', $str)) { echo '匹配成功'; } else { echo '匹配失败'; } ?>
上記のコードは、日付で始まる番号を照合するものです。マッチング結果は次のとおりです。
マッチング成功
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] => 日付 )
正規表現では、文字は w で表され、数字は d で表されます (D は数字以外を表します)
• + は 1 つ以上を表します
• * は 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 '匹配失败'; } ?>
プログラムの実行結果:
配列 ( [0] => )
単一の文字または文字だけの場合は、or 条件を使用して範囲表現を使用できます
文字の値の範囲を表すには [] を使用します
'/[a0 . ]/' は、a または 0 を含む任意の文字列と一致します
さらに、正規表現では - を使用して一連の範囲を表すこともできます
• [a-z] は 26 個の小文字のいずれかを表します
• [A-Z] ] は大文字を表します
• [0-9] は 10 進数を表します
ここまで理解できたので、正規表現を使用してフォームの内容を照合する方法を見てみましょう。
PHP - 名前の確認
次のコードは、名前フィールドに文字とスペースが含まれているかどうかを簡単な方法で検出します。名前フィールドの値が不正な場合は、エラー メッセージが出力されます。
$name = test_input($_POST[ "name"] );
if (!preg_match("/^[a-zA-Z]*$/",$name)) {
$nameErr = "文字とスペースのみが許可されます";
}
PHP - 確認メール
ルール: メール名には文字、数字、アンダースコア、ドットで構成される任意の文字を使用できます。メールには @ 記号が含まれている必要があり、次のテキストは次のとおりに処理されます。ドメイン名ルール
に次のコードが渡されます。電子メールアドレスが正当かどうかを確認する簡単な方法です。電子メール アドレスが不正な場合、エラー メッセージが出力されます:
$email = test_input($_POST["email"]);
if (!preg_match("/^[a-zA-Z0- 9_-] +@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/",$email)) {
$emailErr = "メール形式が無効です!" ;
}
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>
上で書いたルールに従って入力しない場合、次のプロンプトが表示されます:
入力した情報が正しければ、検証に合格します
また、正規表現を使用して携帯電話番号を照合します。携帯電話番号の規則についても考えてください。