虽然选择的答案绝对没问题,但我不喜欢强加格式。我的想法是,如果您可以解释数据,那么格式并不重要。当然,格式越输,你做出的假设越多,你承担的风险就越大。但提供确认屏幕通常可以修正假设。所以,我写道:
/* 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 友好。
享受,