0~9数字组成三位数最多只能重复一次的正则

时间:2023-02-22 16:13:27
0~9数字组成三位数,这个三位数最多只能有一个数字重复,用正则怎么匹配
如112,123,454,018都是正确的
而111就不正确

6 个解决方案

#1


三位数倒好办

$a = array('112', '123', '454', '018', '111');

$a = preg_grep('/(\d)\1{2}/', $a, PREG_GREP_INVERT);
print_r($a);


//输出

Array
(
    [0] => 112
    [1] => 123
    [2] => 454
    [3] => 018
)

#2


if(preg_match('/(\d)\1{2}/', $s))
           echo '不正确';
else
           echo '正确';

#3


引用 1 楼 yiwusuo 的回复:
三位数倒好办

$a = array('112', '123', '454', '018', '111');

$a = preg_grep('/(\d)\1{2}/', $a, PREG_GREP_INVERT);
print_r($a);


//输出

Array
(
    [0] => 112
    [1] => 123
    [……

我要的是正则,而你用的是preg_grep的不匹配模式,难道就没有直接满足要求的正则?

#4


我自己想了个
^(?!(\d)\1{2})\d{3}$

不知道有没有比这个更好的

#5


那你是想匹配一样的还是不一样的
就正则来讲,匹配三个一样的,然后反义,和你的需求不是一致的?

#6


如果3位数只想实现这个功能,何苦用正则,用这个更快:
$a = '012';
if ($a[0] != $a[1] || $a[0] != $a[2] || $a[1] != $a[2]) {
  echo 'yes';
} else {
  echo 'no';
}

#1


三位数倒好办

$a = array('112', '123', '454', '018', '111');

$a = preg_grep('/(\d)\1{2}/', $a, PREG_GREP_INVERT);
print_r($a);


//输出

Array
(
    [0] => 112
    [1] => 123
    [2] => 454
    [3] => 018
)

#2


if(preg_match('/(\d)\1{2}/', $s))
           echo '不正确';
else
           echo '正确';

#3


引用 1 楼 yiwusuo 的回复:
三位数倒好办

$a = array('112', '123', '454', '018', '111');

$a = preg_grep('/(\d)\1{2}/', $a, PREG_GREP_INVERT);
print_r($a);


//输出

Array
(
    [0] => 112
    [1] => 123
    [……

我要的是正则,而你用的是preg_grep的不匹配模式,难道就没有直接满足要求的正则?

#4


我自己想了个
^(?!(\d)\1{2})\d{3}$

不知道有没有比这个更好的

#5


那你是想匹配一样的还是不一样的
就正则来讲,匹配三个一样的,然后反义,和你的需求不是一致的?

#6


如果3位数只想实现这个功能,何苦用正则,用这个更快:
$a = '012';
if ($a[0] != $a[1] || $a[0] != $a[2] || $a[1] != $a[2]) {
  echo 'yes';
} else {
  echo 'no';
}