PHP检查字符串是否包含数字并检查字符串长度
我试图检查用户名字符串是否都是数字(但字段不是数字字段)。如果是这样,我需要通过添加前导0使字符串长度为5个字符 我有以下代码:PHP检查字符串是否包含数字并检查字符串长度,php,numeric,Php,Numeric,我试图检查用户名字符串是否都是数字(但字段不是数字字段)。如果是这样,我需要通过添加前导0使字符串长度为5个字符 我有以下代码: <?php $getuname = $_GET['un']; if (mb_strlen($getuname) <= 1){ $getuname = "0".$getuname; } if (mb_strlen($getuname) <= 2){ $getuname = "0".$getuname;
<?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语句中,该语句首先检查它是否只包含数字。我试过用!是数字,但这似乎不起作用。我之所以这样假设是因为它不是一个数字类型的字段。使用该函数。像这样:
$getuname = str_pad($_GET['un'], 5, '0', STR_PAD_LEFT);
这应该是一种干净的解决方案:
$getuname = $_GET['un'];
if(preg_match('/^\d+$/',$getuname)){
echo sprintf('%05d', $getuname);
}else{
// incorrect format
}
可以使用
is\u numeric
检查数值字段,不管变量是否为字符串
然后,您只需使用str\u pad()
编辑:正如flixer指出的那样,是数值的()
实际上不会执行您特别要求的操作(检查字符串是否只包含数字,即不包含句点、逗号、破折号等被视为“数字”)。在这种情况下,请改用ctype\u 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
这里的关键是
另外,当您传入一个整数变量时,ctype\u digit()
可能返回false(《PHP手册》中的示例)
这是可以的,这取决于您使用它的情况。在您的例子中,您正在验证一个$\u GET
变量,该变量总是一个字符串,因此不会影响您
文档:
:str\u pad()
:ctype\u digit()
if (ctype_digit($getuname) == true) {
$getuname = str_pad($getuname, 5, 0, STR_PAD_LEFT);
}
试试这个:
<?php
$getuname = $_GET['un'];
if(ctype_digit($getuname))
$getuname = str_repeat("0", 5-strlen($getuname)) . $getuname;
?>
希望它对你有用 使用
preg_-match
检查用户名是否只包含数字tas9是否完全正确,preg_-match是检查这一点的最佳解决方案。在这种情况下,is_int和is_numeric不可靠。仅供参考:对于超过100万次的速度测试,ctype_digit
需要0.114777s,正则表达式解决方案需要0.783449sNo无需在此处使用正则表达式。为什么不?检查“我正在尝试检查用户名字符串是否都是数字”的首选解决方案是什么?检查字符串是否只包含数字不是一个好的解决方案,因为它会在“5.1”、“3”和“1e7”等情况下返回true
ctype_digit( '42' ); // true
ctype_digit( 42 ); // false - ASCII 42 is the * symbol
if (ctype_digit($getuname) == true) {
$getuname = str_pad($getuname, 5, 0, STR_PAD_LEFT);
}
<?php
$getuname = $_GET['un'];
if(ctype_digit($getuname))
$getuname = str_repeat("0", 5-strlen($getuname)) . $getuname;
?>