我需要在PHP中使用几个小时的正则表达式,我正在使用ereg。我需要它接受1-23而不带前导零。
^([1-9])|([1][0-9])|([2][0-3])$
这就是我正在使用的但我无法找到错误的位置。
答案 0 :(得分:2)
轮换(|
)适用于周围组中的所有内容,如果不在组中,则适用于全局内容。因此,在您的模式中,^
仅适用于第一个模式,而$
仅适用于最后一个模式。换句话说,您的模式匹配任何以1到9的数字开头的字符串,包含1后跟0到9之间的数字,或以2结尾,后跟0到3之间的数字。
尝试将不同的选项放在一个组中:
^([1-9]|1[0-9]|2[0-3])$
另请注意,24-hour time从00:00开始,因此您的模式应该更像这样:
^(1?[0-9]|2[0-3])$
或者,如果您需要小时为2位数:
^([01][0-9]|2[0-3])$