PHP 检查字符串是否包含数字并检查字符串长度

Wil*_*ill 3 php numeric

我正在尝试检查用户名字符串是否全是数字(但该字段不是数字字段)。如果是这样,我需要通过添加前导 0 使字符串长度达到 5 个字符。

我有这个代码:

<?php
$getuname = $_GET['un'];

if (mb_strlen($getuname) <= 1){
        $getuname = "0".$getuname;
    }
if (mb_strlen($getuname) <= 2){
        $getuname = "0".$getuname;
    }
if (mb_strlen($getuname) <= 3){
        $getuname = "0".$getuname;
    }
if (mb_strlen($getuname) <= 4){
        $getuname = "0".$getuname;
    }   
echo $getuname;
?>
Run Code Online (Sandbox Code Playgroud)

上面的代码可以通过添加零来确保字符串为 5 个字符,但它不是很漂亮,我确信有更好的方法来做到这一点。任何人?

此外,整个部分需要包含在 IF 语句中,该语句首先检查它是否只包含数字。我尝试使用 !is_numeric,但这似乎不起作用。我假设是因为它不是数字类型字段。

Rob*_*ill 5

可以使用它is_numeric来检查数字字段,变量是否为字符串并不重要。请参阅此处的示例。

然后你可以简单地使用str_pad()

if(!is_numeric($test))
    echo $test . ' is not a number!';
else
    echo str_pad($test, 5, 0, STR_PAD_LEFT);
Run Code Online (Sandbox Code Playgroud)

编辑:正如 flixer 指出的那样,is_numeric()实际上不会执行您特别要求的操作(检查字符串是否仅包含数字,即没有句点、逗号、破折号等,这些将被视为“数字”)。在这种情况下,请ctype_digit()改用:

$test_number = '123.4';
$test_number2 = '12345';

echo ctype_digit($test_number) ? $test_number . ' is only digits' : $test_number . ' is not only digits';
echo ctype_digit($test_number2) ? $test_number2 . ' is only digits' : $test_number2 . ' is not only digits';

// output:
// 123.4 is not only digits
// 12345 is only digits
Run Code Online (Sandbox Code Playgroud)

这里的关键是当你有更好的工具来完成这项工作时避免使用正则表达式。

对此添加一点,当您传入整数变量时ctype_digit()可能会返回false :(PHP 手册中的示例)

ctype_digit( '42' ); // true
ctype_digit( 42 ); // false - ASCII 42 is the * symbol
Run Code Online (Sandbox Code Playgroud)

这可能没问题,具体取决于您使用它的情况。在您的情况下,您正在验证一个$_GET变量,该变量始终是一个字符串,因此不会影响您。

文件:

OP 在这里,这就是全部。奇迹般有效...

   if (ctype_digit($getuname) == true) {
    $getuname = str_pad($getuname, 5, 0, STR_PAD_LEFT);
    }
Run Code Online (Sandbox Code Playgroud)

  • “is_numeric”不是检查字符串是否只包含数字的好解决方案,因为它会在“5.1”、“-3”和“1e7”等情况下返回 true (3认同)