如何有效地验证字符串的所有部分都是数字?

时间:2015-11-21 00:19:44

标签: php

我想验证给定的字符串是由仅用斜杠分割的数字组成的:

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;
}

解决方案有效,但感觉有点笨拙。有没有办法让它变得更好?

2 个答案:

答案 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);
}