我正在尝试通过RegExp
:
[a-z0-9-]
。因此,-username
,username-
或user---name
这样的用户名应该全部无效,而user-name
或my-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
答案 0 :(得分:3)
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');
}