PHP 日付検証: 正規表現のトラブルシューティング
正規表現を使用して PHP で日付を検証しようとしていますが、問題に遭遇しています。コードを分析して、より堅牢なソリューションを提供しましょう。
指定した正規表現、%A(0[1-9]|1[012])[- /.](0[1-9] |[12][0-9]|3[01])[- /.](19|20)ddz% は、MM/DD/YYYY 形式の検証には正しいようです。ただし、日付を照合するために使用しているコードが正しくありません。 preg_match の結果を $_POST['birthday'] に割り当てていますが、これは意図したものではありません。
checkdate を使用した検証の改善
正規表現を使用する場合は、PHP の checkdate 関数を利用して検証プロセスを簡素化できます。この関数は、月、日、年を個別のパラメータとして受け取り、日付が有効かどうかを示すブール値を返します。
<code class="php">$test_date = '03/22/2010'; $test_arr = explode('/', $test_date); if (checkdate($test_arr[0], $test_arr[1], $test_arr[2])) { // valid date ... }</code>
このコードでは、/ で区切られた日付文字列を配列に変換します。月、日、年のコンポーネント。次に、これらのコンポーネントを checkdate に渡して、日付の有効性を検証します。
入力検証の追加レイヤー
入力検証を強化するには、次のコードを検討してください。
<code class="php">$test_date = '03/22/2010'; $test_arr = explode('/', $test_date); if (count($test_arr) == 3) { if (checkdate($test_arr[0], $test_arr[1], $test_arr[2])) { // valid date ... } else { // problem with dates ... } } else { // problem with input ... }</code>
このアプローチでは、まず、$test_arr 内の要素を数えることによって、入力文字列に正確に 3 つのコンポーネント (月、日、年) が含まれているかどうかを確認します。カウントが 3 と異なる場合は、入力に潜在的なエラーがあることを示します。その後、checkdate を使用して日付を検証します。
以上がPHP の日付検証: 正規表現は一致しませんか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。