PHP正则表达式:如何白名单字母数字字符?

PHP正则表达式:如何白名单字母数字字符?,php,regex,whitelist,Php,Regex,Whitelist,谁能告诉我为什么1(黑名单)不会抛出意外的结束错误,而2(白名单)会抛出意外的结束错误?1没有过滤掉所有特殊字符,因此我想使用白名单方法。我得到的错误似乎与语法有关,但我无法发现它。谢谢你帮我结束了痛苦 php (1) if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $posteduid)) { $error = "You may not use special characters in your username"

谁能告诉我为什么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";
}

当你注释掉这行的时候

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

使用
/
它仍然会看到
?>
并停止解析PHP,导致一个奇怪的错误。只需删除该部分或使用
/**/
-注释。白名单上的代码示例没有问题。

当您注释掉这一行时

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

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

您的输入示例是什么。我想过滤掉用户。但是,通过ws在给出任何输入之前就出现了一个错误。这个regex中没有什么错误,确切地说是什么错误?你能用它编辑你的帖子吗?当我注释掉1并使用2时,它抛出错误。当我注释掉2并使用1时,没有错误。错误消息中提到的意外结尾在文档的最后,所以似乎有什么东西抛出了错误打开和关闭大括号…您的输入示例是什么。用户#可能是我想要过滤掉的内容。但是,页面在输入任何内容之前就抛出了错误。这个正则表达式中没有错误。错误到底是什么?您能用它编辑您的帖子吗?当我注释掉1并使用2时,它抛出错误。当我注释掉2并使用1时,没有错误。错误消息中提到的意外结尾位于文档的最末尾,因此,如果您使用带有代码着色的编辑器(如记事本+)或IDE(如Netbeans或Eclipse)(都可以免费下载),则似乎会有一些东西从开始和结束括号中脱落如果你使用记事本++或Netbeans或Eclipse(都是免费下载的)这样的代码着色编辑器,你会立即看到这种错误。