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

时间:2014-02-06 19:48:23

标签: 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;
?>

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

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

5 个答案:

答案 0 :(得分:4)

可以使用is_numeric来检查数字字段,变量是否为字符串无关紧要。 See example here.

然后您只需使用str_pad()

进行填充即可
if(!is_numeric($test))
    echo $test . ' is not a number!';
else
    echo str_pad($test, 5, 0, STR_PAD_LEFT);
编辑:正如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

这里的关键是avoid regex when you have better tools to do the job.

要为此添加一点内容,当您传入一个整数变量时,ctype_digit()可能会返回 false :(来自PHP手册的示例)

ctype_digit( '42' ); // true
ctype_digit( 42 ); // false - ASCII 42 is the * symbol

这可以,这取决于你正在使用它的情况。在你的情况下,你正在验证一个$_GET变量,它总是一个字符串,所以它不会影响你。

文档:

OP在这里,这就是一起。像魅力一样......

   if (ctype_digit($getuname) == true) {
    $getuname = str_pad($getuname, 5, 0, STR_PAD_LEFT);
    }

答案 1 :(得分:2)

使用str_pad()功能。像这样:

$getuname = str_pad($_GET['un'], 5, '0', STR_PAD_LEFT);

答案 2 :(得分:2)

试试这个:

<?php
$getuname = $_GET['un'];
if(ctype_digit($getuname))
     $getuname = str_repeat("0", 5-strlen($getuname)) . $getuname;
?>

希望它对你有用。

答案 3 :(得分:1)

这应该是一个干净的解决方案:

$getuname = $_GET['un'];
if(preg_match('/^\d+$/',$getuname)){
    echo sprintf('%05d', $getuname);
}else{
    // incorrect format
}

答案 4 :(得分:-1)

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


while (strlen($getuname) < 5) {
    $getuname = '0' . $getuname;
}

echo $getuname;

?>