PHP REGEX如何验证用户输入的确切格式

时间:2017-07-17 18:58:26

标签: php regex

正则表达式不是我的朋友。他会找一个好人来帮助我。 用户可以采用以下格式指定工作时间:00:00-12:3000:00-12:30,14:15-18:00

因此,我需要验证输入是否符合变体,但没有其他任何内容可以通过。我试图结合像

这样的作品
[0-9] {2} [0-9] {2}

但我真的不明白:/

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 - 01后跟任意数字
      • | - 或
      • 2[0-3] - 2后面跟着03的数字
    • : - 冒号
    • [0-5] - 从05
    • 的数字
    • \d - 任意数字
  • - - 连字符
  • (?1) - 第1组内定义的模式
  • (?:,(?1)-(?1))? - 一个可选序列(?在最后使正则表达式引擎匹配非捕获(?:...)匹配内的模式匹配1或0次)匹配
    • , - 逗号
    • (?1)-(?1) - 第1组模式,-和第1组模式
  • $ - 字符串结尾

请注意,(?1)subroutine call,用于重用(...)内部模式的一部分来捕获括号。 (?1)表示采用模式中第一对非转义括号中定义的模式。