我想验证给定的字符串是由仅用斜杠分割的数字组成的:
validate('7515/1453') // true
validate('7515/1453/4') // true
validate('7515') // false
validate('') // false
validate('abc/4') // false
我的解决方案:
function validate($str) {
$valid = false;
if (($parts = explode($str, '/')) !== false) {
$valid = true;
foreach($parts as $part) {
if (!ctype_digit($part)) {
$valid = false;
break;
}
}
}
return $valid;
}
解决方案有效,但感觉有点笨拙。有没有办法让它变得更好?
答案 0 :(得分:3)
使用正则表达式,表示"字符串的开头,一个或多个数字,后跟斜杠。 (任选重复)。然后是更多数字,然后结束"。
^(\d+\/)+\d+$
e.g。
$re = "/^(\\d+\\/)+\\d+$/";
$str = "7515/1453";
preg_match($re, $str, $matches);
在此尝试:https://regex101.com/r/tR4tL9/1 - 点击"单元测试"在左边的菜单中,你的测试就在那里;点击播放'箭头来运行它们。
答案 1 :(得分:1)
您可以使用功能filter_var_array
并验证您的部件。
http://php.net/manual/en/function.filter-var-array.php
免费正则表达式示例:
function validate($string) {
$parts = explode('/', $string);
if (count($parts) <= 1) {
return false;
}
$validatedParts = filter_var_array($parts, FILTER_VALIDATE_INT);
return !(bool)array_search(false, $validatedParts, true);
}