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


How to effectively validate that all parts of string are numbers?

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

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