js中一个奇怪的正则匹配问题

新手上路,请多包涵

前端小白
最近在写一个用户名校验的正则,不能包含数字以及一些特殊符号.
代码如下图所示(之所以不是代码,是因为 segmentfault会有转义).

clipboard.png
如图所示的正则竟然会匹配到大写字母,不知道是为什么.后来删删减减,只剩下 下面的代码,也可以匹配到大写字母,在火狐和Chrome已测试过;
想请教一下各位哥哥姐姐.

var nameReg =/[!-_]/g;
var str="gGFDSFSD!-_";
str.match(nameReg)

火狐结果如下:
clipboard.png
Chrome结果如下

clipboard.png
谢谢大家!

阅读 1.9k
2 个回答

/[!-_]/g ,正则中的 - 被解析为范围,即从 ! 到 _ , 类似于a-z,0-9这种,! 对应的ascii码值为33,_ 对应的ascii值为95,即ascii值在33~95之间的字符均会被匹配上, 这就是为什么大写英文字母全部会被匹配上,而小写英文字母不会被匹配。

如何不想将 - 解析成一个范围,使用转义字符 即可。

即:nameReg = /[!\-_]/g;

var nameReg = /[0-9.$#!<>+-_]/;
var str = "abc!-_";
if (nameReg.test(str)) throw new Error("请输入正确的姓名");
else callback();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题