用户名的jQuery正则表达式

Jig*_*ain 1 php regex jquery

我想为用户名实现具有以下条件的正则表达式:

  1. 用户名仅包含az,AZ,0-9和 - (连字符);

  2. 用户名不应包含ONLY数字或仅限连字符,但它只能包含字符;

  3. 第一个和最后一个字符不应该是连字符(它可以是数字但不是完全数字);

  4. 此外,不应该有两个连字符背靠背;

  5. 最小字符数为5,最大值为25;

到目前为止,我已经尝试过这个正则表达式:

var filter = /(?=[a-zA-Z0-9-]{5,25}$)^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/;
Run Code Online (Sandbox Code Playgroud)

它正确地达到了条件1,3,4和5.但它并不完全满足条件2.在我的正则表达式中,它确保它不完全由连字符组成.但它确实只允许数字,它不应该.

任何人都可以让我知道我哪里出错或需要做什么.正如对正则表达式的解释将不胜感激.

pet*_*ete 5

为了可维护性,这样的事情通常更好地写成一系列测试而不是一个大测试.

var filter = function (username) {
    var allDigits = /^[0-9]+$/g,
        allHyphens = /^[-]+$/g, //doesn't need a character class, but I find it's more readable
        multiHyphens = /[-]+/g,
        startsWith = /^[A-Za-z0-9]{1}/,
        endsWith = /[A-Za-z0-9]{1}$/
        hasInvalidChars = /[^A-Za-z0-9-]/,
        meetsReqs = false;
    if (username.length >= 5 || username.length <= 25) { //ensure correct length
        meetsReqs = !allDigits.test(username);
        meetsReqs = meetsReqs && !allHyphens.test(username);
        meetsReqs = meetsReqs && !multiHyphens.test(username);
        meetsReqs = meetsReqs && !hasInvalidChars.test(username);
        meetsReqs = meetsReqs && startsWith.test(username);
        meetsReqs = meetsReqs && endsWith.test(username);
    }
    return meetsReqs;
};
Run Code Online (Sandbox Code Playgroud)