正则表达式以PHP格式检查有效数字

时间:2018-05-29 19:25:51

标签: php regex

我想检查字符串是否采用以下格式

  1. YYMMDD-XXXX
  2. YYYYMMDD-XXXX
  3. YYMMDDXXXX
  4. YYYYMMDDXXXX
  5. 我有这个正则表达式

    ^\d{6,8}(-\d{4})?$
    

    然后我被困住了。我是正则表达式的新手。我可以得到一些帮助或一些指示吗?

3 个答案:

答案 0 :(得分:3)

使-可选,你的正则表达式有效:

^\d{6,8}(-?\d{4})?$

https://regex101.com/r/uoF1HM/1/

这也可以匹配许多数字格式。你的示例字符串看起来像日期,如果是这种情况我会使用更严格的东西(或者已经写过,例如https://stackoverflow.com/a/14566624/3783243可能是一个很好的起点)。

答案 1 :(得分:1)

您可以使用此功能:

function checkFunc($value){
  if (preg_match('/^[0-9]{6,8}(-?)[0-9]{4}$/', $value)) {
    //is valid
     return $value;
  } else {
    //is invalid
    return false;
 }
}

echo checkFunc("20180529-4444"); //20180529-4444

但是对于字符串的第一部分,您必须创建不同的日期格式检查

答案 2 :(得分:0)

在正则表达式^\d{6,8}(-\d{4})?$中,您有一个可选组(-\d{4})?,组内有连字符。这意味着您只能匹配\d{6,8}或连字符\d{6,8}-\d{4}但不是\d{6,8}\d{4}这样的格式,因为根据可选组,连字符应该在那里。

如果您希望在没有任何捕获组的情况下匹配您的值,则只能使破折号可选?

那就匹配

  • ^在行首处断言位置
  • \d{6,8}匹配6 - 8位数字
  • -?匹配可选短划线
  • \d{4}匹配4位数字
  • $断言行尾的位置

    ^\d{6,8}-?\d{4}$