如何使用正则表达式指定间隔号?

时间:2011-05-02 10:42:34

标签: php regex

我必须使用正则表达式检查变量(php,preg_match)是否来自1988年和2011年;我知道如何使用普通的if / else来做,但我想使用正则表达式!

5 个答案:

答案 0 :(得分:5)

有时,正则表达式不是唯一的答案:

if( preg_match('/^\d{4}$/', $input) && $input>=1988 && $input<=2011 ){
}

答案 1 :(得分:2)

不会那么容易,因为正则表达式意味着逐个字符匹配。你可以使用这样的东西(可能不是一个好主意)。

/(198[89]|199\d|200\d|201[01])/

答案 2 :(得分:1)

试试这个:

/^[12][90][8901][8901]\z/

答案 3 :(得分:1)

为什么要使用正则表达式执行此操作?

一种解决方案可能与(?:198[8-9]|199[0-9]|200[0-9]|201[0-1])一致。

答案 4 :(得分:0)

使用preg_replace_callback:

<?php
preg_replace_callback('%([0-9]{4})%', function($match) {
    $number = $match[1];
    if($number < 1988 || $number > 2011) return; /* Discard the match */
    /* Return the replacement here */
}, $input);

在我看来,这是最灵活的解决方案。