怎么校验一个字符串里是不是有重复的数字和字母的组合?

比如abc123abc123 至少两个字符重复就算符合,至少得字母和数字组合

比如c1 c123 abc123 有这样重复的部分 就算符合了

阅读 3.4k
4 个回答

/([a-zA-Z]+\d+).*\1/.test('abc123abc123')
关键是\1,表示重复之前的捕获

不确定你的描述是否和我想的一样,最低符合条件是否是 存在一个字母和一个数字的组合(不分前后),至少存在两个这样的组合。

比如 aaab123 ab12 实际上他满足要求的情况是 ab1 组合 或者 b1组合 或者 b12 组合 或者 ab12 组合。

如果只是判断是否有你说的这样的条件,只要 b1 组合满足既满足。 用贪心来弄就行。

(下面代码只是针对我上面说的情况,如果你的需求不是这样,希望能表述清楚)

const str = 'c1 c3 abc23';
function testArr(arr) {
    for (let i = 0, len = arr.length; i < len; i++) {
        if (/[a-z]/.test(arr[i]) && /[0-9]/.test(arr[i + 1])) {
            if (str.split(arr[i] + '' + arr[i + 1]) > 2) {
                return true;
            }
        } else if (/[a-z]/.test(arr[i + 1]) && /[0-9]/.test(arr[i])) {
            if (str.split(arr[i] + '' + arr[i + 1]) > 2) {
                return true;
            }
        }
    }
    return false;
}
console.log(testArr([...str]));
var str = "c1 c223 abcc123";
function testRepeat(str){
  var arr = str.match(/([a-zA-Z]\d)/g);//匹配字符转换为数组  本例:[c1,c2,c1]
  for(var i=0;i<arr.length;i++){//遍历每一位是否与其他相同
    if(arr.indexOf(arr[i],i+1)>0){
      return true;
    }
  }
  return false;
}
console.log(testRepeat(str))

/([a-z]\w+)(?=.*\1)/ig

> ptn = /([a-z]\w+)(?=.*\1)/ig
> s='xyz2333H1abc123abc123xyz233HH12'
> s.match(ptn)
[ 'xyz233', 'H1', 'abc123' ]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题