我想验证给定的字符串是否只由斜杠分割的数字组成:
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;
}
解决方案有效,但感觉有点笨拙。有没有办法让它变得更好?
用一个正则表达式,它说"字符串的开头,一个或多个数字,后面跟着斜线。(可选重复)。然后是更多数字,然后是结尾"。
^('d+'/)+'d+$
例如
$re = "/^(''d+''/)+''d+$/";
$str = "7515/1453";
preg_match($re, $str, $matches);
在这里试试:https://regex101.com/r/tR4tL9/1-点击左侧菜单中的"单元测试",您的测试就在那里;单击"播放"箭头运行它们。
您可以使用函数filter_var_array
来验证您的部件。
http://php.net/manual/en/function.filter-var-array.php
Regex免费示例:
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);
}