我有以下代码来验证消息。即使消息无效,消息也会传递并返回true。
代码:
$message = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 \" ' ! & ( ) @ [ ] ? . : , ; - _";
if(isset($message) && strlen($message) > 10)
{
if (preg_match("/[a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]/u", $message))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
当前代码应该传递为true,所有字符都有效,但是当我更改消息时
$message = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 \" ' ! & ( ) @ [ ] ? . : , ; - _ >";
它应该以最后一个字符失败。但它通过并发送真实。我可能会遗漏某些东西或者没有逃避某些东西。
最终,邮件将通过HTML表单发送。
更新:
将正则表达式更改为
preg_match(“/ ^ [a-zA-Z0-9 \”'!&()@ [] \?。:,; -_] + $ / u“,$ message)
或
if (preg_match("/^[a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]*$/u", $message))
修正了验证,没想到多次出现的字符。
答案 0 :(得分:0)
你应该添加字符串的开头(^),字符串字符结尾($)和*来表示字符串中字符的多次出现。消息字符串中有多个空格。
if (preg_match("/^[a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]*$/u", $message))
答案 1 :(得分:0)
将preg匹配更改为以下内容:
preg_match("/^[a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]+$/u", $message)
preg匹配中的^字符强制正则表达式从字符串的开头开始读取,而美元'$'强制正则表达式直到字符串结尾。
在美元'$'之前添加了+字符。这接受字符串
中的多个字符答案 2 :(得分:0)
你的正则表达式说,任何字符串,包含任何一个字符
“a-zA-Z0-9 \”'!&()@ [] \?。:,; -_“
有效。但实际上我们需要弄清楚字符串是否包含任何其他符号。为此,您可以在sybmols类的开头放置“^”并检查字符串是否与我们的正则表达式不匹配。 代码如下:
if(isset($message) && strlen($message) > 10) {
if (!preg_match("/[^a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]/u", $message)) {
return true;
}
else {
return false;
}
}
else {
return false;
}
或者只是改变你的正则表达式 -
“/ ^ [a-zA-Z0-9 \”'!&()@ [] \?。:,; -_] + $ / u“,
我添加了文字:
^ - begin of the string,
+ - quantifier, which means, that there must be at least 1 symbol (you can use *, as well, cause you check lenght of the string),
$ - end of the string.
建议 - 检查一下