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

I have a user-input string with 2 comma-delimited integers.

Example (OK):

3,5

I want to reject any user input that contains leading 0's for either number.

Examples (Bad):

03,5
00005,3
05,003

Now what I could do is separate the two numbers into 2 separate string's and use ltrim on each one, then see if they have changed from before ltrim was executed:

$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!
}

..but this seems unnecessarily verbose. Is there a cleaner way to do this? Perhaps with preg_match?

All the current answers fail if any of the values are simply 0.

You can just convert to integer and back and compare the result.

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

However I am more curious as to why this check matters at all.

Here is one approach using preg_match. We can try matching for the pattern:

\b0\d+

The \b would match either the start of the string, or a preceding comma separator.

If we find such a match, it means that we found one or more numbers in the CSV list (or a single number, if only one number present) which had a leading zero.

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

One way would be with /^([1-9]+),(\d+)/; a regex that checks the string starts with one or more non-zero digits, followed by a comma, then one or more digits.

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

This separates the digits into two groups and explicitly avoids leading zeros.

This can be seen on Regex101 here and PHPLiveRegex here.

You can do a simple check that if the first character is 0 (using [0]) or that ,0 exists in the string

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

You could shorten the code and check if the first character of each part is a zero:

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