正则表达式不起作用

时间:2016-09-14 11:04:38

标签: php regex

我需要使用php正则表达式匹配以下模式,但它并没有给出预期的结果。

例如: - 需要匹配模式  5555 5545 9930

$id = "4567 3423 4567";
$regex = "/^[1-9]\d{4} \d{4} \d{4}$/";
if (preg_match($regex, $id)) {
   // Indeed, the expression "^[2-9]\d{2} \d{3} \d{4}$" matches the date string
   echo "Found a match!";
}else {
   // If preg_match() returns false, then the regex does not
   // match the string
   echo "The regex pattern does not match. :(";
}

3 个答案:

答案 0 :(得分:1)

如果你想匹配:4个非零数字+空格+4个数字+空格+4个数字

^([1-9]){4} \d{4} \d{4}$应该做的伎俩

答案 1 :(得分:1)

我认为修改现有正则表达式最安全的方法是添加第一个[2-9]\d{2} \d{3}的替代方法:

^(?:[2-9]\d{2} \d{3}|\d{4} \d{4}) \d{4}$
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

请参阅regex demo

详细

  • ^ - 字符串开头
  • (?:[2-9]\d{2} \d{3}|\d{4} \d{4}) - 其中一个替代方案:
    • [2-9]\d{2} \d{3} - 从29的数字,任意2位数字,空格和3位数字
    • | - 或
    • \d{4} \d{4} - 4位数,空格,4位数(对于新的字符串类型)
  • - 空格
  • \d{4} - 4位数
  • $ - 字符串结束。

请参阅PHP demo

$id = "4567 3423 4567";
$regex = "/^(?:[2-9]\d{2} \d{3}|\d{4} \d{4}) \d{4}$/";
if (preg_match($regex, $id)) {
    echo "Found a match!";
} else {
    echo "The regex pattern does not match. :(";
}

答案 2 :(得分:0)

正则表达式的简单编辑将是

^[1-9]\d{3} \d{4} \d{4}