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,則表示輸入中存在潛在錯誤。隨後,它使用 checkdate 驗證日期。
以上是PHP 日期驗證:正規表示式無法匹配嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!