[英]Decipher preg_match
我正在尝试修复其他开发人员编写的一些代码:
$rexSafety = '@[0-9-\+\s\(\)]+$@';
if (!preg_match($rexSafety, $_POST['phone'])) $spam = true;
当我输入不带空格或任何其他字符的11位数字(英国标准电话长度)时,该数字(来自$_POST['phone']
)被标记为垃圾邮件。
不幸的是,我对正则表达式一无所知,所以我希望有人能够“破译”这句话并告诉我期望值是什么?
01234567890
应该是一个匹配项。 目前不是。
如果要检查11位数字,请输入\\d{11}
$rexSafety = '~^\d{11}$~';
if (!preg_match($rexSafety, $_POST['phone'])) $spam = true;
如果带空格,破折号等的格式有效(不知道英国电话号码),请首先删除这些字符以获取纯数字。
$phone = str_replace(array(' ', '-'), '', $_POST['phone']); // remove spaces & dashes
$rexSafety = '~^\d{11}$~';
if (!preg_match($rexSafety, $phone)) $spam = true;
这是您的正则表达式的细目。 我把@
扔掉了,因为他使用了@
作为边界字符。 通常,您会使用类似/
(请注意regex101.com使用的名称)
[0-9-\+\s\(\)]+$
[]
表示我们要匹配的字符集。 您将所有想要匹配的内容放入此处。 破折号表示您有一个范围,因此0-9
将匹配所有十进制数字
\\
是转义字符。 这意味着您需要文字字符。 所以\\+
将匹配字符串中的+
\\s
是与空格匹配的特殊类
\\(\\)
表示您想匹配任何括号(
或)
$
是字符串的结尾(这是不必要的,因为我们需要匹配的任何东西)
我调整了它,这应该可以做您想要的
if(preg_match('/([^0-9-\+\s\(\)])/', $_POST['phone'])) $spam = true;
通过添加^
我们告诉正则表达式我们不希望此类匹配任何内容。 我也将其括在括号中以使其成为捕获组。 这意味着它将抓取匹配的元素并返回它们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.