php preg_match日期格式"yyyy-MM"

apo*_*rat 5 php regex preg-match

我正在尝试使用preg_match修改的preg格式:检查生日格式(dd/mm/yyyy)以匹配信用卡到期日期(yyyy-MM格式)

    if (!preg_match('/([0-9]{4})\-([0-9]{2})/', $expirationDate, $matches)) {
        throw new Services_Payment_Exception('Card expiration date is invalid');
    }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它还会验证无效值,例如20111-02(无效年份).我在这做错了什么?我想确认年份是4位数,月份是2位数(01,02 ... 12)

Ada*_*man 9

锚定你的正则表达式:

preg_match('/^([0-9]{4})-([0-9]{2})$/', $expirationDate, $matches)
Run Code Online (Sandbox Code Playgroud)

你的正则表达式没有达到预期的效果,因为它匹配"20111-02"的"0111-02"子串.

锚定 ^$匹配输入字符串中的特定位置:^匹配字符串的开头并$匹配结尾.

还要注意,没有必要转义连字符,因为它只有一个特殊的功能[].