正则表达式 - 字符串不应包含超过 7 位数字

Regex - String should not include more than 7 digits

本文关键字:数字 包含超 字符串 正则表达式      更新时间:2023-09-26

字符串规则:

  • 可以包含 0-7 位数字

测试用例 :

  • abcd1234ghi567True
  • 1234567abctrue
  • ab1234cd567true
  • abc12True
  • abc12345678False

我如何为相同的正则表达式想出一个正则表达式?

我面临的问题是 - 如何保持整个字符串中的位数。数字可以出现在字符串中的任何位置。

我想要一个纯粹的正则表达式解决方案

方法 1

如果你同意将一些逻辑放在你的JavaScript中,那么像这个函数这样简单的事情应该可以做到:

function validate(teststring) {
    return teststring.match(/'d/g).length < 8;
}

演示

function validate(teststring) {
    return teststring.match(/'d/g).length < 8;
}
document.body.innerHTML =
    '<b>abcd1234ghi567 :</b> ' + validate('abcd1234ghi567') + '<br />' +
    '<b>1234567abc :</b> ' + validate('1234567abc') + '<br />'+
    '<b>ab1234cd567 :</b> ' + validate('ab1234cd567') + '<br />'+
    '<b>abc12 :</b> ' + validate('abc12') + '<br />'+
    '<b>abc12345678 :</b> ' + validate('abc12345678') + '<br />';

(另见这首小提琴


方法2

如果你希望所有的逻辑都放在正则表达式而不是JavaScript中,你可以使用像/^('D*'d?'D*){7}$//^([^0-9]*[0-9]?[^0-9]*){7}$/这样的正则表达式,并使用RegExp.prototype.test()而不是String.prototype.match(来测试你的字符串。

在这种情况下,您的验证函数将如下所示:

function validate(teststring) {
    return /^([^0-9]*[0-9]?[^0-9]*){7}$/.test(teststring);
}

演示:

function validate(teststring) {
    return /^([^0-9]*[0-9]?[^0-9]*){7}$/.test(teststring);
}
document.body.innerHTML =
    '<b>abcd1234ghi567 :</b> ' + validate('abcd1234ghi567') + '<br />' +
    '<b>1234567abc :</b> ' + validate('1234567abc') + '<br />'+
    '<b>ab1234cd567 :</b> ' + validate('ab1234cd567') + '<br />'+
    '<b>abc12 :</b> ' + validate('abc12') + '<br />'+
    '<b>abc12345678 :</b> ' + validate('abc12345678') + '<br />';

通了!

/^('D*'d?'D*){0,7}$/

每个数字字符

都可以被非数字字符包围。

以下正则表达式可以检查总位数是否小于 7:

var i, strings = ["abcd1234ghi567", "1234567abc", "ab1234cd567", "abc12", "abc12345678"];
for (i of strings) {
  document.write(i + " -> " + /^(?:['D]*[0-9]['D]*){0,7}$/.test(i) + "</br>");
}