【问题标题】:pattern html to preg_match PHP [duplicate]模式html到preg_match PHP [重复]
【发布时间】:2020-10-16 07:52:35
【问题描述】:

我正在将下一个模式用于 HTML (0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d。

我希望 PHP preg_match() 使用完全相同的模式进行服务器端验证。有人知道吗?有没有什么转换器之类的。

该模式适用于 12/12/1999 和 12-12-1999,如您所见,它只允许 1900 年和 2000 年。

我在网上搜索了该模式,但我找不到 12/12/1999 和 12-12-1999 + 1900 和只有 2000 年的组合模式。

有人知道一个好的网站来转换这些东西或制作 preg_match PHP 或 HTML 模式吗?

【问题讨论】:

  • 它不适用于 preg_match 吗?您是否尝试将 ~ 作为分隔符而不是 /?
  • 它是一个日期,只需将if(DateTime::createFromFormat('d/m/Y', .. 作为验证的一部分,调用两次并不昂贵,并且可以支持任何格式
  • 您需要preg_match('~^(?:0?[1-9]|[12][0-9]|3[01])([- /.])(?:0?[1-9]|1[012])\1(?:19|20)\d{2}$~', $text),否则您将匹配较长字符串中的模式,并且您可能会匹配12-12.1988,例如分隔符不一致的字符串。
  • @WiktorStribiżew 感谢您的帮助 Wiktor,但它在下一个解决方案中起作用。 preg_match('/(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\d\d/', '12-12-9999', $matches);
  • 那么,您想在323434512-12-99993423534 中匹配12-12-9999?

标签: php preg-match


【解决方案1】:

您需要做的就是转义正斜杠 (/)。使用反斜杠转义正斜杠,例如 \/

这就是你的模式:

(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\d\d

preg_match('/(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\d\d/', '12-12-9999', $matches);

这是一个使用 PHP 正则表达式引擎 (PCRE) 匹配两个日期的 regex101 示例:

https://regex101.com/r/tVEwwD/3

或者,另一种选择是使用不同的分隔符,如下所示:

preg_match('~(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d~', '12/12/9999', $matches);

注意正则表达式模式前后的~ 字符。那是分界线。

【讨论】:

  • 哦,是的,我认为有人投了反对票,因为 Wiktor 提到的日期没有限制。 preg_match('~^(?:0?[1-9]|[12][0-9]|3[01])([- /.])(?:0?[1-9]|1[012])\1(?:19|20)\d{2}$~', $text) 不过我还是需要测试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多