我正在尝试通过RegExp使用以下规则验证用户名:


避免前面和后面的破折号
避免多次破折号
更新:它也应该只允许[a-z0-9-]


因此,诸如-usernameusername-user---name之类的用户名均应无效,而仍应将诸如user-namemy-user-name之类的用户名识别为有效的用户名。

目前,我正在通过两个这样的RegExp进行此操作:jsFiddle

var a = new RegExp("^([^-][a-z0-9][a-z0-9-]+[a-z0-9][^-])$", "i");
var b = new RegExp("-[-]+", "i");
var username = "some-one";

if ( a.test(username) && !b.test(username) ) {
    alert(username.match(a)[1]);
} else {
    alert('error');
}


上面的代码工作得很好,但是我想知道是否有任何方法可以将这两个RegExp组合在一起。原因既不是性能也不是更干净的代码。我只是想提高自己的RegEx-ing技能,因为在过去几天中我尝试了所知道的一切,但是没有成功。

更新资料

实际上,这个^([^-][a-z0-9][a-z0-9-]+[a-z0-9][^-])$应该是这个^([a-z0-9][a-z0-9-]+[a-z0-9])$。我不知道为什么把它们放在那里! jsFiddle

最佳答案

http://jsfiddle.net/Vv7ma/1/上检查

var a = new RegExp("(^-|[-]{2}|-$)", "i");
var username = "some-one";

if (! a.test(username)) {
    alert(username);
} else {
    alert('error');
}


如果前面有“-”,则错误。

如果以“-”结尾,则错误。

如果“-”连续超过两个,则错误。

满足的http://jsfiddle.net/Vv7ma/3/的最终答案(也应只允许[a-z0-9-]。)

var a = new RegExp("^([a-z0-9]+-)+[a-z0-9]+$", "i");
var username = "some-one";

if (a.test(username)) {
    alert(username);
} else {
    alert('error');
}

关于javascript - 检测多个破折号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20300048/

10-13 09:41