我有一个用户输入的字符串,其中包含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!
}
?
答案 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);
这会将数字分为两组,并明确避免前导零。
答案 4 :(得分:1)
如果任何一个值只是0
,所有当前答案都将失败。
您可以只转换为整数然后返回并比较结果。
$arr = explode(',', $input);
foreach($arr as $item) {
if( (str)intval($item) !== $item ) {
oh_noes();
}
}
但是我对为什么这项检查很重要感到好奇。