PHP-检查2个逗号分隔整数中的前导0

时间:2019-01-21 19:36:25

标签: php regex

我有一个用户输入的字符串,其中包含2个逗号分隔的整数。

示例(确定):

3,5

我要拒绝任何一个包含前两个数字的用户输入。

示例(错误):

03,5
00005,3
05,003

现在,我可以要做的是将两个数字分成两个单独的string,并在每个数字上使用ltrim,然后查看它们是否比之前{ {1}}已执行:

ltrim

..但这似乎不必要。有没有更清洁的方法可以做到这一点?也许使用$string = "03,5"; $string_arr = explode(",",$string); $string_orig1 = $string_arr[0]; $string_orig2 = $string_arr[1]; $string_mod1 = ltrim($string_orig1, '0'); $string_mod2 = ltrim($string_orig2, '0'); if (($string_mod1 !== $string_orig1) || ($string_mod2 !== $string_orig2)){ // One of them had leading zeros! }

5 个答案:

答案 0 :(得分:3)

您可以缩短代码并检查每个部分的第一个字符是否为零:

$string = "03,5";
$string_arr = explode(",",$string);
if ($string_arr[0][0] === "0" || $string_arr[1][0] === "0") {
    echo "not valid";
} else {
    echo "valid";
}

答案 1 :(得分:2)

这是使用preg_match的一种方法。我们可以尝试匹配模式:

\b0\d+

\b会匹配字符串的开头,前面的逗号分隔符。

如果找到这样的匹配项,则意味着我们在CSV列表中找到了一个或多个数字(如果存在一个数字,则为单个数字),且前导零。

$input = "00005,3";
if (preg_match("/\b0\d+/", $input)) {
    echo "no match";
}

答案 2 :(得分:2)

您可以简单地检查第一个字符是0(使用[0])还是字符串中存在,0

if ( $string[0] == "0" || strpos($string, ",0") !== false ) {
    // One of them had leading zeros!
}

答案 3 :(得分:1)

一种方法是使用/^([1-9]+),(\d+)/;用于检查字符串的正则表达式以一个或多个非零数字开头,然后是逗号,然后是一个或多个数字。

preg_match('/^([1-9]+),(\d+)/', $input_line, $output_array);

这会将数字分为两组,并明确避免前导零。

这可以在Regex101 here 和PHPLiveRegex here 上看到。

答案 4 :(得分:1)

如果任何一个值只是0,所有当前答案都将失败。

您可以只转换为整数然后返回并比较结果。

$arr = explode(',', $input);
foreach($arr as $item) {
    if( (str)intval($item) !== $item ) {
        oh_noes();
    }
}

但是我对为什么这项检查很重要感到好奇。