php - 用户名的 jQuery 正则表达式

标签 php jquery regex

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

  1. 用户名仅包含 a-z、A-Z、0-9 和 -(连字符);

  2. 用户名不得仅包含数字或连字符,而只能包含字符;

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

  4. 此外,不应有 2 个连续的连字符;

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

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

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

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

谁能告诉我哪里出了问题或者需要做什么。正则表达式的解释将不胜感激。

最佳答案

为了可维护性,这样的事情通常最好编写为一系列测试,而不是一个大测试。

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;
};

关于php - 用户名的 jQuery 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474772/

相关文章:

php - mysql 登录凭据的安全性如何

php - 在 "Onsubmit"上调用多个函数

javascript - 从 A 到 B 的弧线坐标

SWTOR 名称的正则表达式

php - 将身份证号码添加到数据库PHP

php - 更好的 PHP usort()

php - 由于重复 Ajax 调用,无法正确复制文本

jquery - 将 onChange 事件附加到 Rails 中的选择列表

javascript - 在选择器中使用正则表达式

ruby-on-rails - 如何找到@[XX :XXXX] in a string and then find the surrounding text? 的所有实例