我使用以下正则表达式验证用户名(在注册表中输入类型文本),以确保用户名仅包含字母数字字符、点、破折号或下划线。
if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',$my_name)) { echo 'no_valid'; }
当我在文本字段中输入例如 % 或 # 或 @ 时,我会正确返回错误消息,即它不是有效的用户名,有效字符 (.-_) 也被接受,所以它似乎工作正常,直到我键入 & 或 +,然后我可以使用 preg_match 键入之前已经排除的任何无效字符。
谁能告诉我为什么会这样,我该如何克服这个问题?