在我的WordPress网站上,我检查了一些用户输入。为此,我使用了两个正则表达式。
相关的行是
preg_match($telephone,'/\(?([0-9]{2,5})\)?([ .-]?)([0-9]{2,5})\2([0-9]{2,5})/')
和
preg_match($website,'/(((http|ftp|https):\/{2})?+(([0-9a-z_-]+\.)+(it|com|org)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+))?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?))\b/imuS')
在这两行中我收到以下错误:
警告:preg_match()[function.preg-match]:分隔符不能是字母数字或反斜杠。
我很陌生,因为我知道反斜杠可以是分隔符,我从网络的各个角落都得到了确认。
我按照this question中的说明更改了起始和结束反斜杠。
preg_match($telephone,'#\(?([0-9]{2,5})\)?([ .-]?)([0-9]{2,5})\2([0-9]{2,5})#')
和
preg_match($website,'#(((http|ftp|https):\/{2})?+(([0-9a-z_-]+\.)+(it|com|org)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+))?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?))\b#imuS')
但是我不断得到相同的错误,即使反斜杠不再使用分隔符。
我做错了什么?
答案 0 :(得分:3)
答案 1 :(得分:1)
在preg_match
syntax中,正则表达式模式是第一个参数,与之匹配的字符串是第二个,而不是相反。
因此你应该使用
preg_match('#(((https?|ftp)://)?+(([0-9a-z_-]+\.)+(it|com|org)(:[0-9]+)?((/([~0-9a-zA-Z\#+%@./_-]+))?(\?[0-9a-zA-Z+%@/&[\];=_-]+)?)?))\b#imuS', $website)
和
preg_match('/\(?([0-9]{2,5})\)?([ .-]?)([0-9]{2,5})\2([0-9]{2,5})/', $telephone)