不确定为什么这个正则表达式返回true

时间:2015-12-28 03:05:43

标签: javascript regex

尝试使用此正则表达式来验证用户名,这就是我所拥有的:

var goodUsername  = /[a-zA-Z0-9_]/g;

console.log(goodUsername.test("HELO $"));

但是,我是否$在那里它返回true。不知道为什么。

我基本上只想要用户名中的字母,数字和_以及

似乎在这里工作https://regex101.com/r/nP4iG7/1

3 个答案:

答案 0 :(得分:1)

你需要添加锚..

/^[a-zA-Z0-9_]+$/;

Anchors有助于进行精确匹配。 ^线锚的开始,$线锚的结束。而且你需要重复一次或多次char类,否则它会匹配一个只包含一个字符的字符串。

答案 1 :(得分:1)

您使用的RegEx搜索主题字符串中的任何匹配项。在您的情况下, HELO 符合条件。如果您想将条件应用于整个字符串,则应使用

定义字符串begin和end
var goodUsername  = /^[a-zA-Z0-9_]+$/;
console.log(goodUsername.test("HELO $"));//false

答案 2 :(得分:0)

您可以在列表中搜索<​​strong>不中的任何字符(&#34;否定character set&#34;):

var badUsername = /[^a-zA-Z0-9_]/;

console.log(!badUsername.test("HELO $"));

或更简单

var badUsername = /\W/;

因为\W被定义为

  

匹配基本拉丁字母表中不是单词字符的任何字符。相当于[^A-Za-z0-9_]

如果你喜欢做正面匹配,使用其他答案建议的锚点,你可以使用\w缩短你的正则表达式:

var goodUsername = /^\w+$/;