php中的正则表达式错误

时间:2012-07-20 15:59:13

标签: php regex

我在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 个答案:

答案 0 :(得分: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...
                                           ^^---

答案 1 :(得分: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)){

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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