【发布时间】:2013-05-26 05:30:51
【问题描述】:
我使用以下正则表达式验证用户名(在注册表中输入文本),以确保用户名仅包含字母数字字符、点、破折号或下划线。
if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',$my_name)) { echo 'no_valid'; }
当我在文本字段中输入例如 % 或 # 或 @ 时,我会正确返回错误消息,即它不是有效的用户名,并且有效字符 (.-_) 也被接受,所以它似乎可以正常工作,直到当我键入 & 或 + 时,我可以使用 preg_match 键入之前已经排除的任何无效字符。
谁能告诉我为什么会这样,我该如何解决这个问题?
【问题讨论】:
-
我试过你的代码,它对我来说很好。
-
$my_name 是如何设置的?即
index.php?name=bob&x将名称命名为bob。您可能需要为 5 个字符或更多字符的字符串添加最小长度,即/^[a-zA-Z0-9\._\-]{5,}$/ -
对不起,我忘了提到我在输入类型用户名字段的 keyup 事件上通过 ajax 帖子调用这个 php 正则表达式。我不知道这是否对您来说是一个额外的有价值的信息。
-
为什么不完全排除
&和+,或者做一个preg_replace?这是一种选择。 -
是的,这是一个选项,我已经尝试将 & 和 + 替换为 '' 但这是一个非常糟糕的用户体验。我无法将错误消息返回给我的用户做错了什么......以便修复它并继续。
标签: php regex preg-match