是否可以编写一个正则表达式来检查给定数字是否出现了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;
答案 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);