【发布时间】:2014-01-08 12:20:46
【问题描述】:
我正在尝试为表单验证创建一个正则表达式,但它总是返回 true。用户必须能够添加 {user|2|S} 之类的内容作为输入,但如果使用 \ 进行转义,还可以使用括号。
此代码暂时检查左括号{。
$regex = '/({(?=([a-zA-Z0-9]+\|[0-9]*\|(S|D[0-9]*)}))|[^{]|(?<=\\\){)*/';
if (preg_match($regex, $value)) {
return TRUE;
} else {
return FALSE;
}
可能的正确输入是:
Hello {user|1|S}, you have {amount|2|D2}
或
Hello {user|1|S}, you have {amount|2|D2} in \{the_bracket_bank\}
但是,这应该返回 false:
Hello {user|1|S}, you have {amount|2}
还有这个:
Hello {user|1|S}, you have {amount|2|D2} in {the_bracket_bank}
可以在此处找到一个实时示例:http://regexr.com?37tpu 请注意,在末尾的后面有一个 \,PHP 给了我错误消息,因为我不得不在我的代码中额外地转义它。
【问题讨论】:
-
您可能会发现转储 pregmatch 的第三个参数(即查看匹配的内容)并单独测试每个 OR 正则表达式更容易。记录您的正则表达式也会对(您)有所帮助。
-
为什么正则表达式不应该匹配
Hello {user|1|S}, you have {amount|2|D2} in {the_bracket_bank}?
标签: php regex pcre regex-lookarounds