簡體   English   中英

Php驗證24小時時間格式

[英]Php validating 24 hour time format

我允許用戶選擇從00:00:0023:00:00的一個小時,並且需要檢查他們是否提交了正確的格式。 是否有驗證 24 小時格式的正則表達式或 php 函數,例如HH:MM:SS

我找到了一些正則表達式示例,但我正在驗證的 24 小時時間始終設置為00分鍾和秒。 只有時間不同。

例如

18:00:00, 23:00:00, 01:00:00

這匹配 24 小時時間,包括秒

([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]

如果你只想要 00 分鍾和秒,那么

([01]?[0-9]|2[0-3]):00:00

這是一個可以使用的最終樣本。

$myTime = '23:00:00';

$time = preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $myTime);

if ( $time == 1 )
{
  // make a error!
}
else
{
  // make a error!
}

試試這個

$time="23:00:00";

preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $time);

通過這個函數檢查,你可以在Laravel global helper functions file的 CodeIgniter 輔助文件中添加這個函數,並多次調用它

<?php
if(!function_exists("check_24_timeFormat")) {
    /**
     *
     * This for check time is in  24 time format  
     * 
     * @param string $time  [ $time => time in 24 hours format like 23:00:00 ]
     * @author Arafat Thabet <arafat.733011506@gmail.com> 
     * @return bool
     */
    function check_24_timeFormat($time){
        if (preg_match("#((0([0-9])|(1[0-9]{1})|(2[0-4])):([0-5])([0-9]):([0-5])([0-9]))#", $time)) {
            return true;
        }
        else
        {
            return false;
        }
    }
}

它必須是正則表達式嗎? 您可以輕松地使用 PHP 的strtotime函數來驗證日期和時間(也可以在沒有日期的情況下工作)。 如果給定時間無效,則strtotime返回false (PHP 5.1 之前為-1 )。 因此不要忘記使用===操作數!

if (strtotime("12:13") === false) { echo("Wrong Time!"); } // Echos nothing
if (strtotime("19:45") === false) { echo("Wrong Time!"); } // Echos nothing
if (strtotime("17:62") === false) { echo("Wrong Time!"); } // Echos 'Wrong Time!'

這對我來說就像一個魅力。

$time = "23:59:60";    
preg_match("/^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $time)

雖然選擇的答案絕對沒問題,但我不是強加格式的堅持者。 我的想法是,如果您可以解釋數據,那么格式並不重要。 當然,格式越多,您做出的假設越多,您承擔的風險就越大。 但提供確認屏幕通常會修正假設。 所以,我寫道:

/* Sample usage:
 *  echo '<ol>',
 *       '<li>validateTime ("13:23") = ',       (validateTime ('13:23')     ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("03:23 ") = ',      (validateTime ('03:23 ')    ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("03:23 Am") = ',    (validateTime ('03:23 aM')  ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("03:23Am") = ',     (validateTime ('03:23aM')   ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("03:23 pM") = ',    (validateTime ('03:23 pM')  ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("323") = ',         (validateTime ('323')       ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("058") = ',         (validateTime ('058')       ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("1323pm") = ',      (validateTime ('1323pm')    ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("1323am") = ',      (validateTime ('1323am')    ? 'TRUE' : 'FALSE'), '</li>',   // TRUE - I think this one makes sense, but I'm not sure. 13th hour of the day, starting in the AM?
 *       '<li>validateTime ("323pm") = ',       (validateTime ('323pm')     ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("3") = ',           (validateTime ('3')         ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("3PM") = ',         (validateTime ('3PM')       ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
 *       '<li>validateTime ("13:73") = ',       (validateTime ('13:73')     ? 'TRUE' : 'FALSE'), '</li>',   // FALSE
 *       '<li>validateTime ("25:23") = ',       (validateTime ('25:23')     ? 'TRUE' : 'FALSE'), '</li>',   // FALSE
 *       '<li>validateTime ("Any crap") = ',    (validateTime ('Any crap')  ? 'TRUE' : 'FALSE'), '</li>',   // FALSE
 *       '</ol>';
 */
function validateTime ($testTime)
{
    define ('regExpPattern', '/^([01]?[0-9]|2[0-3])([:]?[0-5][0-9])?[ ]?([apAP][mM])?$/');

/*      regExpPattern explanation
            /^          # String must begin with.
            (           # Start group.
            [01]        # A 0 or 1.
            ?           # Optionally.
            [0-9]       # 0 through 9.
            |           # Or.
            2           # 2.
            [0-3]       # 0 through 3.
            )           # End of group. This group will match hour in a 24 hour clock.
            (           # New group.
            [:]?        # Optional colon.
            [0-5][0-9]  # Minutes, 00 through 59.
            )           # End of group.
            ?           # Make previous group optional.
            [ ]?        # Optional space.
            (           # New group.
            [apAP]      # One of the following 'apAP'.
            [mM]        # One of the following 'mM'.
            )           # End of group.
            ?           # Make previous group optional. This allows for things like 3 o'clock.
            $/          # Must end with. */

    return preg_match (regExpPattern, trim ($testTime));
}   // function validateTime ($testDate)

如果您看到改進或錯誤,請告訴我。

我應該接受其他分隔符嗎? 如果有人選擇輸入 13.45 怎么辦? 那應該是有效時間嗎? 畢竟,我確實知道用戶的意思。

現在下一步是獲取所有可能格式的用戶輸入,並使它對 SQL 友好。

享受,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM