我正在尝试检查用户名字符串是否都是数字(但该字段不是数字字段)。如果是这样,我需要通过添加前导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,但这似乎不起作用。我假设因为它不是数字类型字段。
答案 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);
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
变量,它总是一个字符串,所以它不会影响你。
文档:
str_pad()
:http://php.net/str_pad ctype_digit()
:http://www.php.net/manual/en/function.ctype-digit.php 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;
?>