ユーザーが から00:00:00
までの時間を選択できる23: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
この関数で確認すると、この関数を CodeIgniter ヘルパー ファイルに追加して、Laravel global helper functions file
さらに呼び出すことができます。
<?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;
}
}
}
選択された回答はまったく問題ありませんが、私は形式を押し付けることに固執しているわけではありません。データを解釈できれば、形式は問題にならないという考え方です。もちろん、フォーマットで敗者であるほど、より多くの仮定を立て、より多くのリスクを冒します. しかし、確認画面を提供することで、通常は仮定が修正されます。だから、私は書いた:
/* 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 に適したものにすることです。
楽しみ、