繁体   English   中英

检测多个破折号

[英]Detect multiple dashes

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

  1. 避免领先和跟随破折号
  2. 避免多次破折号
  3. 更新:它应该只允许[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');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM