我有一个字符串,类似于max_length[5]
。为了验证,我需要能够验证它是否具有字符串结构(max_length,min_length,exact_length的定义选项),[,数字(任何数量:5,121,5322等),]。类似的东西:
$string = 'max_length[5]';
$split = splitThis($string); //replace splitThis() with a real function
//split looks like: array('max_length[]', 5) or something like that
如果$split
能够以评论的形式出现,那么我可以轻松验证max_length[]
是否为有效字符串,5
是有效数字。我该怎么做?可能吗?我几个小时以来一直在寻找类似的场景,并且无法获得任何其他解决方案来解决我的问题。
像this one这样的问题很相似,但我还没有能够在我的方案中使用它。
答案 0 :(得分:2)
这并不是特别难以做到的。唯一棘手的是设计模式以更容易地提取有趣的数据:
function splitThis($str) {
return preg_match('~\A(?:max|min|exact)_length(?=\[(\d+)]\z)~', $str, $m) ? $m : false;
}
print_r(splitThis("max_length[5]"));
模式细节:
~ # pattern delimiter
\A # start of the string
(?:max|min|exact)_length
(?= # lookahead assertion: followed by:
\[(\d+)] # digits (captured in group 1) between square brackets
\z # end of the string
)
~
前瞻只是一个测试,里面的所有子模式都不是整个匹配的一部分。所以preg_match
仅返回" max_length"作为整个匹配和捕获组1,所以" 5"。
用法:
if ( false !== ($result = splitThis($str)) ) {
...
} else {
...
}