【问题标题】:PHP regex: How to whitelist alphanumeric characters?PHP regex:如何将字母数字字符列入白名单?
【发布时间】:2014-08-07 17:33:30
【问题描述】:

谁能告诉我为什么 1(黑名单)不会抛出意外的结束错误而 2(白名单)会? 1 没有过滤掉所有特殊字符,所以我想使用白名单方法。我得到的错误似乎与语法有关,但我无法发现它。感谢您帮助结束我的痛苦。

php

(1)
if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $posteduid))
{
$error = "You may not use special characters in your username";
}

(2)
if (!preg_match("#^[a-zA-Z0-9]+$#", $posteduid))
{
$error = "You may not use special characters in your username";
}

错误信息:

Parse error: syntax error, unexpected $end in /.../join.php on line 346

【问题讨论】:

  • 您输入的示例是什么。
  • user# 将是我想要过滤掉的东西。然而,页面在给它任何输入之前就会抛出一个错误。
  • 这个正则表达式没有错
  • 到底是什么错误?你能用它编辑你的帖子吗?
  • 当我注释掉 1 并使用 2 时,它会抛出错误。当我注释掉 2 并使用 1 时,没有错误。错误消息中提到的意外结束位于文档的最后,因此似乎有些东西从左大括号和右大括号中脱落...

标签: php regex whitelist


【解决方案1】:

当你注释掉这一行时

if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $posteduid))

使用// 它仍然会看到?&gt; 并停止解析PHP,从而导致奇怪的错误。只需删除该部分或使用/* */-cmets。白名单上的代码示例没有任何问题。

【讨论】:

  • 如果您使用像 Notepad++ 这样的带有代码着色功能的编辑器或像 Netbeans 或 Eclipse 这样的 IDE(均可免费下载),您会立即看到此类错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多