我想检查字符串是否采用以下格式
我有这个正则表达式
^\d{6,8}(-\d{4})?$
然后我被困住了。我是正则表达式的新手。我可以得到一些帮助或一些指示吗?
答案 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位数字 $
断言行尾的位置