使用正则表达式测试数字是否出现“ x”次

时间:2019-10-15 06:02:47

标签: javascript regex

是否可以编写一个正则表达式来检查给定数字是否出现了x次?

我正在尝试使用以下代码来确定给定字符串(16位数字)中是否至少存在一个以上的数字。例如,如果只有一位数字16次,则不能有两位不同的数字。

let multipleDigits = /[0-9]{16}/g.test(ccString);
    console.log('More than one digit? ' + result);

整个功能是:

function validator(ccNumber) {
    let ccString = ccNumber.toString();

调用和输出是:

validator(1111111111111112);
More than one digit? false

预期输出为“ true”。我将不胜感激任何帮助/指导。

谢谢

p.s。我正在尝试的正则表达式的另一种变化是:

let testOnlyOneDigit = /\d{16}/g;

2 个答案:

答案 0 :(得分:1)

通过在开头捕获\d,然后反引用该捕获组直到到达字符串的末尾,来测试字符串是否仅包含单个数字。然后否定测试以查看字符串是否包含其他数字:

const hasMoreThanOneDigit = num => !/^(\d)\1*$/.test(num.toString());
console.log(hasMoreThanOneDigit(1111111111111112));
console.log(hasMoreThanOneDigit(1111111111111));

如果您不能指望输入是数字,并且还需要验证它(“一个包含至少两个不同数字的数字字符串”),那么测试将必须更加复杂一些:匹配并捕获一个数字,然后匹配更多的数字,并通过在其前面加上负号提前查找,最终匹配与捕获的数字不同的数字:

const hasMoreThanOneDigit = num => /^(\d)\d*(?!\1)\d+$/.test(num.toString());
console.log(hasMoreThanOneDigit(1111111111111112));
console.log(hasMoreThanOneDigit(1111111111111));
console.log(hasMoreThanOneDigit('111111AAA1111111'));

答案 1 :(得分:1)

我们可以构造一个正则表达式来测试数字是否只有一个唯一的数字,然后将结果取反并打印出来。

正则表达式为:

/^(\d)\1{15}$/

它将第一个数字捕获到组1中,然后检查组1中的内容是否重复了15次以上。

然后,我们可以使用!来反转结果:

function validator(ccNumber) {
    let ccString = ccNumber.toString();
    let multipleDigits =/^(\d)\1{15}$/.test(ccString);
    console.log('More than one digit? ' + !multipleDigits);
}
validator(1111111111111111);
validator(1111111111111112);