正则表达式中的数字不会在字符串中重复超过五次,例如联系人号码

时间:2018-01-10 11:11:08

标签: javascript php regex

你好每一个我是regex字段的新手我只是期待创建一个正则表达式,它没有重复五次以上的数字,它应该只从7,8,9位开始。

我以这种方式创建了正则表达式,它给了我第一个条件,例如它从7,8,9开始。但有问题我无法理解如何将任何单个数字的重复限制为仅五次。请帮忙。

my regex   ^[789]\d{9}$

2 个答案:

答案 0 :(得分:1)

  

但有问题我无法理解如何限制重复   任何单个数字只有五次

您可以检查数字是否重复N次(使用this answer

var checkIfDigitRepeatedNTimes = function(input, N) 
{
  var regex = new RegExp("(\\d)\\1{" + N + "}", "g");
  //console.log( regex );
  return !!input.match(regex);
}

<强>演示

var checkIfDigitRepeatedNTimes = function(input, N) 
{
  var regex = new RegExp("(\\d)\\1{" + N + "}", "g");
  //console.log( regex );
  return !!input.match(regex);
}

console.log( checkIfDigitRepeatedNTimes( "454324154", 5 ) );

console.log( checkIfDigitRepeatedNTimes( "789666666", 5 ) );

修改

将checkIfDigitRepeatedNTimes方法与正则表达式一起使用

var regex = /^[789]\d{9}$/;
var input = "9851542144";
var isValid = !!input.match( regex ) && checkIfDigitRepeatedNTimes( input, 5 );

修改2

如果要求确保重复不一定是连续的,则将checkIfDigitRepeatedNTimes修改为

var checkIfDigitRepeatedNTimes = function(input, N) 
{
  input = input.split("").sort().join(""); //sorting the input 
  var regex = new RegExp("(\\d)\\1{" + N + "}", "g");
  //console.log( regex );
  return !!input.match(regex);
}

答案 1 :(得分:0)

由于这个问题被标记为php,我将在php中提供一个演示,但模式也适用于javascript(不需要数字排序)。我在方法中的第二个模式允许非连续重复数字。

代码:(Demo

$tests=['1234567890'=>'bad start',
        '81234567890'=>'too long',
        '1211211199'=>'bad start, six repeats',
        '1111112233'=>'bad start, six repeats',
        '2111111222'=>'bad start, six repeats',
        '8221111111'=>'seven repeats',
        '1211121212'=>'six repeats',
        '9999999999'=>'ten repeats',
        '8901234567'=>'valid',
        '7677677677'=>'seven repeats',
        '8888833333'=>'valid',
        '9112345789'=>'valid',
        '9444449555'=>'valid',
        '6666655544'=>'bad start'];

foreach($tests as $test=>$prediction){
    echo "$test ";
    if(preg_match('/^[7-9]\d{9}$/',$test) && !preg_match('/(\d)(?=(?:\d*\1){5})/',$test)){
        echo "pass";
    }else{
        echo "fail";
    }
    echo " \t($prediction)\n";
}

输出:

1234567890 fail     (bad start)
81234567890 fail    (too long)
1211211199 fail     (bad start, six repeats)
1111112233 fail     (bad start, six repeats)
2111111222 fail     (bad start, six repeats)
8221111111 fail     (seven repeats)
1211121212 fail     (six repeats)
9999999999 fail     (ten repeats)
8901234567 pass     (valid)
7677677677 fail     (seven repeats)
8888833333 pass     (valid)
9112345789 pass     (valid)
9444449555 pass     (valid)
6666655544 fail     (bad start)