-1

我在 php 上使用以下正则表达式来验证日期:

if(!preg_match("/^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/([12][0-9]{3})$/i",$date_born)){

但是我得到了以下错误,不知道为什么,我总是使用“(”和 Reg Exps。

[function.preg-match]: 未知修饰符 '('

有什么提示吗?

4

4 回答 4

5

您的模式中有许多未转义/的内容:

if(!preg_match("/^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[01etc...
                                           ^---

最简单的是切换到另一个分隔符:

if(!preg_match("#^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[01etc...
                ^----

或逃避所有内部/

if(!preg_match("/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[01 etc...
                                           ^^---
于 2012-07-20T16:01:13.773 回答
2

您的正则表达式中有分隔符/。您需要使用\/(或更改您的分隔符,正如 Marc B 指出的那样)来转义它。

if( !preg_match("/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/([12][0-9]{3})$/i",$date_born)){
于 2012-07-20T16:01:00.127 回答
1

你没有在你的正则表达式中转义你的正斜杠,所以解释器只读取你的第二个正斜杠并假设其余的都是修饰符。由于(不存在修饰符,因此正则表达式会中断。

于 2012-07-20T16:00:53.663 回答
0

为什么要用正则表达式让自己变得困难 - 改用strptime

于 2012-07-20T16:06:53.833 回答