如何检查字符串是否仅由数字组成?

问题描述 投票:0回答:5

如何使用 PHP 检查用户是否仅输入数字且长度至少为 4 个数字?

php
5个回答
6
投票

Mark Byers 的建议很好,但还有另一种方法:

$valid = ctype_digit($number) && strlen($number) >= 4;

5
投票

您可以使用正则表达式:

/^\d{4,}$/

使用示例:

$s = "7325";
if (preg_match('/^\d{4,}$/', $s)) {
    echo "matches";
}

1
投票

ctype_digit() && strlen() 获胜

<?php

function benchmark($callback){
  echo sprintf('%-30s: ', $callback);
  $t = microtime(true);
  foreach(range(1, 10000) as $n){
    call_user_func($callback);
  }
  echo (microtime(true)-$t)."\n";
}

function mark_byers_preg_match(){
  $s = "7325";
  preg_match('/^\d{4,}$/', $s);
}

function notjim_ctype_digit_strlen(){
  $number = 7325;
  ctype_digit($number) && strlen($number) >= 4;
}

function tomalak_intval_broken(){
  $check = 7325;
  intval($check) == $check && $check >= 1000 && $check <= 9999;
}

benchmark('mark_byers_preg_match');
benchmark('notjim_ctype_digit_strlen');
benchmark('tomalak_intval_broken');

?>

结果

mark_byers_preg_match         : 0.029040098190308
notjim_ctype_digit_strlen     : 0.026585817337036
tomalak_intval_broken         : 0.019872903823853

注意:@Tomalak 不适用于以

0
开头的数字,因此它不符合条件


编辑: @kiethjgrant 的解决方案已被删除,因为

intval(0000)
评估为
false
,而它应该是
true


0
投票

您有可以开始使用的示例代码吗?

要严格回答您的问题,您可以使用像

if(preg_match('/^\d{4,}$/', $input)...
这样的正则表达式。

但是这里还有很多需要考虑的地方:您需要考虑验证和过滤(并且最好将两个问题分开)。 如果你严格检查整数,那么我想你不会受到 SQL 注入、XSS 等问题的影响,但你确实需要处理这些问题,因为迟早你需要过滤& 验证除简单整数之外的其他内容。


0
投票

你应该始终使用最有效的方式来做到这一点

if ( is_numeric($imput) && isset($input[3]) )
{
  // your code
}

isset() 是一种语言构造,它总是比 strlen() 更快。

isset($input[n-1]) 告诉你字符串(通过表单传递的数据始终是字符串)是否至少有 n 长。

is_numeric() 检查它是否是有效的数字字符串。

我认为它比 ctype_digit() && strlen() 更好。

© www.soinside.com 2019 - 2024. All rights reserved.