4

我使用以下正则表达式验证用户名(在注册表中输入类型文本),以确保用户名仅包含字母数字字符、点、破折号或下划线。

if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',$my_name)) {  echo 'no_valid'; }

当我在文本字段中输入例如 % 或 # 或 @ 时,我会正确返回错误消息,即它不是有效的用户名,有效字符 (.-_) 也被接受,所以它似乎工作正常,直到我键入 & 或 +,然后我可以使用 preg_match 键入之前已经排除的任何无效字符。

谁能告诉我为什么会这样,我该如何克服这个问题?

4

2 回答 2

5

问题出在其他地方。你的表达是正确的。我用PHP测试过。由于它与 '&' 字符一起发生,我的猜测是您的数据在发送之前未转换为 URL 安全字符。尝试在 JS 中使用 encodeURI() 函数。

于 2013-05-30T15:15:06.037 回答
-1
if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',urldecode($my_name))) {  echo 'no_valid'; }
于 2013-05-30T15:20:07.020 回答