尝试检查正则表达式的输入。
该字段应仅允许使用字母数字字符,破折号和下划线,并且不应允许空格。
但是,下面的代码允许使用空格。
我错过了什么?
var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
{ alert('invalid'); }
else
{ alert('valid'); }
答案 0 :(得分:121)
但是,下面的代码允许使用空格。
不,它没有。但是,它只会在长度为1的输入上匹配。对于长度大于或等于1的输入,在字符类后面需要+
:
var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) == -1)
{ alert('invalid'); }
else
{ alert('valid'); }
请注意,-
(在本例中)和_
都不需要转义。
答案 1 :(得分:14)
如果你只对布尔值感兴趣,你应该不使用String.match 而是使用RegExp.prototype.test(即/abc/.test("abcd")
)而不是String.search() 。您还需要重复您的角色类,如Andy E的答案所述:
var regexp = /^[a-zA-Z0-9-_]+$/;
答案 2 :(得分:3)
有愚蠢的错误。所以发帖在这里,如果有人发现它有用
-\._
- 表示连字符,点和下划线\.-_
- 表示从点到下划线的所有符号答案 3 :(得分:2)
此语法比已发布到此点的答案更简洁,并获得相同的结果:
let regex = /^[\w-]+$/;
答案 4 :(得分:1)
不要逃避下划线。可能会造成一些打击。
答案 5 :(得分:0)
尝试一下
"[A-Za-z0-9_-]+"
应使用下划线和连字符
答案 6 :(得分:0)
尝试一下,对我来说很好。
"^([a-zA-Z])[a-zA-Z0-9-_]*$"