2015-07-03 67 views
0

我有一个字符串,类似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这样的问题是类似的,但我没有能够得到它在我的情况下工作。

回答

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 { 
    ... 
} 
+0

辉煌!在我能够梦想成为的正则表达式中,你会更好。它可能不会给出结果中的括号,但它的工作原理就是这样。如果括号没有正确放置,没有给出结果,所以相同的结果只是采用不同的方法。验证提交是否有效仍然很容易。 'array('max_length',5)'的最终结果完全符合我的需求。非常感谢!!正则表达式的解释也很有帮助。 – justanotherprogrammer