【问题标题】:Validate message with php使用 php 验证消息
【发布时间】:2013-07-04 11:17:43
【问题描述】:

我有以下代码来验证消息。即使消息无效,消息也会通过并返回 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 \" ' ! & ( ) @ [ ] ? . : , ; - _ >";

它应该以最后一个字符失败。但它通过ands发送真实。我可能会错过一些东西或没有逃避一些东西。

消息最终将通过 HTML 表单发送。

更新:

将正则表达式更改为

preg_match("/^[a-zA-Z0-9 \"'!&()@[]\?.:,;-_]+$/u", $message)

if (preg_match("/^[a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]*$/u", $message))

修正了验证,没有想到字符的多次出现。

【问题讨论】:

  • 您是否试图保护自己免受攻击?有点矫枉过正,htmlspecialchars() 就足够了。

标签: php validation


【解决方案1】:

将 preg 匹配更改为以下内容:

preg_match("/^[a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]+$/u", $message)

preg 匹配中的 ^ 字符强制正则表达式从字符串的开头开始读取,而美元 '$' 则强制正则表达式一直查找到字符串的末尾。

在美元“$”之前添加了 + 字符。这接受字符串中的多个字符

【讨论】:

  • 添加这个然后为有效和无效文本返回 false
  • 啊,等等,我要测试 :) !
  • 编辑了答案,在美元 ($) 之前添加了 + 字符。
【解决方案2】:

您应该添加字符串开头(^),字符串结尾字符($)和*来表示字符串中字符的多次出现。消息字符串中有多个空格。

if (preg_match("/^[a-zA-Z0-9 \"'!&()@[\]\?.:,;\-_]*$/u", $message))

【讨论】:

  • 那么消息开头的 ^ :) 呢?
  • 两者都使用简单的随机文本,例如“kjdshkjfh 12”,我将对表单进行广泛的测试,如果遇到问题,我将切换解决方案。在这一点上,两者似乎都很完美。感谢您提供的解决方案:)
【解决方案3】:

您的正则表达式表示,任何包含任何字符的字符串

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

建议 - 检查一个

【讨论】:

    猜你喜欢
    • 2013-04-22
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多