正则表达式不是我的朋友。他会找一个好人来帮助我。
用户可以采用以下格式指定工作时间:00:00-12:30
或00:00-12:30,14:15-18:00
因此,我需要验证输入是否符合变体,但没有其他任何内容可以通过。我试图结合像
这样的作品[0-9] {2} [0-9] {2}
但我真的不明白:/
答案 0 :(得分:3)
你走了。
while ($rows = mysqli_fetch_assoc($result)) {
$validated = filter_var($rows['email'], FILTER_VALIDATE_EMAIL);
if ($validated) {
echo $validated;
}
}
https://regex101.com/r/lUQHun/1
为每个部分的((?&hh_mm))-((?&hh_mm))(?:,((?&hh_mm))-((?&hh_mm)))?(?(DEFINE)(?<hh_mm>(?:[01]\d|2[0-3]):[0-5]\d))
提供的捕获组。
扩展
hh:mm
答案 1 :(得分:1)
您可以使用
'~^((?:[01]\d|2[0-3]):[0-5]\d)-(?1)(?:,(?1)-(?1))?$~'
请参阅regex demo
匹配
^
- 字符串的开头((?:[01]\d|2[0-3]):[0-5]\d)
- 匹配的捕获组#1:
(?:[01]\d|2[0-3])
- 两种选择中的任何一种:
[01]\d
- 0
或1
后跟任意数字|
- 或2[0-3]
- 2
后面跟着0
到3
的数字:
- 冒号[0-5]
- 从0
到5
\d
- 任意数字-
- 连字符(?1)
- 第1组内定义的模式(?:,(?1)-(?1))?
- 一个可选序列(?
在最后使正则表达式引擎匹配非捕获(?:...)
匹配内的模式匹配1或0次)匹配
,
- 逗号(?1)-(?1)
- 第1组模式,-
和第1组模式$
- 字符串结尾请注意,(?1)
是subroutine call,用于重用(...)
内部模式的一部分来捕获括号。 (?1)
表示采用模式中第一对非转义括号中定义的模式。