没有连续字母和数字的正则表达式

时间:2017-01-11 19:10:04

标签: regex swift

我需要制作一个正则表达式来验证Swift中字母数字字符串的以下几点,我不知道如何实现它们:

  • 不超过4个连续的字母或数字字符

    (例如12345a或1abcde会出错,但123a45或abcd1e是正确的)

  • 不超过4个相同的字母数字字符

    (例如111a11或aaaa1a会出错)

  • 正好6个字符

非常感谢帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

正如其他人所指出的那样,仅使用正则表达式很难完成第二个要求,而第一个和第三个要求可以通过以下方式完成:

^
(?!\D*\d{5,}\D*)
(?![^A-Za-z]*[A-Za-z]{5,}[^A-Za-z]*)
.{6}
$

请参阅a demo on regex101.com

答案 1 :(得分:0)

在每个简单的步骤中完成整个工作: 注意:这是一个javascript解决方案,但您可以按照相同的逻辑转换为您选择的语言:

var str = "ss4sss";

fnTest = function(str){
  var isValid = true;


  if(/\d{5,}/.test(str)){// no more than 4 consecutive numeric chars
    return false;
  }else if(/[a-z]{5,}/i.test(str)){// no more than 4 consecutive alpha chars
    return false;
  }else if(str.length !== 6){// not 6 characters
    return false;    
  }else{ // any character used more than 4 times
    var reg = /([\w\W])/g;
    var arrM ;
    var obj = {};
    while(arrM = reg.exec(str)){
      var letter = arrM[1];
      if(!obj[letter]){
        obj[letter] = 0;
      }
      obj[letter]++;

      if(obj[letter] > 4){    
        isValid = false;
        break;
      }
    }
  }
  return isValid;
}
fnTest(str);