我使用以下正则表达式验证用户名(注册表单中的输入类型文本),以确保用户名仅包含字母数字字符,点,短划线或下划线。
if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',$my_name)) { echo 'no_valid'; }
当我在文本字段中键入例如%或#或@时,我正确地回复了它不是有效用户名的错误消息,也接受了有效字符(。-_),所以它似乎工作正常我输入的时间&或+,然后我可以使用preg_match键入我之前已经排除的任何无效字符。
有人能告诉我为什么会这样,我怎么能克服这个问题?
答案 0 :(得分:5)
问题出在其他地方。你的表达是正确的。我用PHP测试过。因为它发生在'&'我的猜测是你的数据在发送之前没有转换为URL安全字符。尝试在JS中使用encodeURI()函数。
答案 1 :(得分:-1)
if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',urldecode($my_name))) { echo 'no_valid'; }