字母数字,破折号和下划线,但无空格正则表达式检查JavaScript


92

尝试根据正则表达式检查输入。

该字段应仅允许使用字母数字字符,破折号和下划线,并且不得使用空格。

但是,下面的代码允许空格。

我想念什么?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
我喜欢下面的Andy E的答案。另外,您可能想签出gskinner.com/RegExr以进行快速的正则表达式编辑。真是太好了
pixelbobby

Answers:


155

但是,下面的代码允许空格。

不,不是。但是,它仅在长度为1的输入上匹配。对于长度大于或等于1的输入,您需要+以下字符类:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

请注意,-(在这种情况下)和_逃避都没有。


16

如果您只对布尔值感兴趣,则不应使用String.match,而应使用RegExp.prototype.test(即/abc/.test("abcd"))而不是String.search()。您还需要按照Andy E的答案中的说明重复角色类:

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

8
实际上,RegExp.prototype.test如果您只对布尔值感兴趣,则应使用该方法。
安迪E

7

这种语法比到目前为止发布的答案更为简洁,并且可以达到相同的结果:

let regex = /^[\w-]+$/;

1
考虑添加一个注释,说明您的答案也适用于国际字符。我不确定使用JavaScript,但是可以使用bash进行工作:egrep -wo'(\ w |-| _)+'
Ivan Ogai

4

有愚蠢的错误。因此,如果有人觉得有用,请在此处发布

  1. -\._ -表示连字符,点和下划线
  2. \.-_ -表示从点到下划线的所有符号

#2仅在方括号中适用,即[\ .-_]是点到下划线范围内的字符。但是,如果没有方括号,则它们都是由三个符号组成的序列,只是顺序不同。
取消

1

不要逃避下划线。可能会引起一些不适。


1
为什么这么说 我知道下划线并不需要进行转义,但我从来没有听说过的\_造成的问题,在JavaScript或任何其他正则表达式的味道。
艾伦·摩尔

1
纯粹的猜测。否则该表达式看起来很好,无论如何都不应匹配空格,但我只是将其扔在那里。可能应该是评论而不是答案。
David Fells,


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.