Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的正则表达式错误_Php_Regex - Fatal编程技术网

php中的正则表达式错误

php中的正则表达式错误,php,regex,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]:未知修饰符'(' 有什么提示吗?您没有在正则表达式中避开正斜杠,因此解释器只读取第二个正斜杠,并假定其余的都是修饰符。因为(修饰符不存在,正则表达式

我在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]:未知修饰符'('


有什么提示吗?

您没有在正则表达式中避开正斜杠,因此解释器只读取第二个正斜杠,并假定其余的都是修饰符。因为
修饰符不存在,正则表达式中断。

您的正则表达式中有分隔符字符
/
。您需要使用
\/
对其进行转义(或者按照Marc B指出的更改分隔符)


在您的模式中有许多未被替换的
/

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...
                                           ^^---

为什么要用正则表达式来解决这个问题呢?请改用。

谢谢,我避开了内部问题:P@user1511579用于封装regex=bad(IMHO)的双引号。您最终会做一些事情,比如将文字控制字符传递给PCRE而不是转义序列,或者意外地传递变量,这可能会打开一个安全漏洞。
if(!preg_match("/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[01 etc...
                                           ^^---