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

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

字段应该只允许字母数字字符、破折号和下划线,不应该允许空格。

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

我错过了什么?

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

Don't escape the underscore. Might be causing some whackness.

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

不,不是的。但是,它将只匹配长度为1的输入。对于长度大于或等于1的输入,在字符类之后需要一个 +:

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

注意,无论是 -(在本例中)还是 _都不需要转义。

如果您只对布尔值感兴趣,那么应该使用 不使用 String.match但是 RegExp.Prototype.test (即 /abc/.test("abcd"))代替 String.search ()。你还需要重复你的角色类,就像 Andy E 在答案中解释的那样:

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

犯了个愚蠢的错误,如果有人觉得有用,请在这里发帖

  1. [-\._]-表示连字符、点和下划线
  2. 指从点到下划线范围内的所有符号

这是我能找到的用于此检查的正则表达式的最简洁的语法:

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

试试这个

"[A-Za-z0-9_-]+"

应该允许下划线和连字符

试试这个,对我很有效。

"^([a-zA-Z])[a-zA-Z0-9-_]*$"