【问题标题】:How to check that a string is an int, but not a double, etc.?如何检查字符串是 int,但不是 double 等?
【发布时间】:2011-01-02 00:02:42
【问题描述】:

PHP 有一个intval() 函数,可以将字符串转换为整数。但是,我想事先检查该字符串是否为整数,以便在错误时向用户提供有用的错误消息。 PHP 有 is_int(),但是对于像 "2" 这样的字符串返回 false。

PHP 有 is_numeric() 函数,但如果数字是双精度数,它将返回 true。我想要一些对双精度返回 false,但对 int 返回 true 的东西。

例如:

my_is_int("2") == TRUE
my_is_int("2.1") == FALSE

【问题讨论】:

  • “2.0”应该如何处理?

标签: php string casting types int


【解决方案1】:

ctype_digit怎么样?

来自手册:

<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}
?>

上面的例子会输出:

字符串 1820.20 不包含所有数字。 字符串 10002 由所有数字组成。 字符串 wsl!12 不包含所有数字。

这仅在您的输入始终为字符串时才有效:

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false

如果您的输入可能是int 类型,则将ctype_digitis_int 结合起来。

如果您关心负数,则需要检查输入是否有前面的-,如果是,请在输入字符串的substr 上调用ctype_digit。这样的事情会做到这一点:

function my_is_int($input) {
  if ($input[0] == '-') {
    return ctype_digit(substr($input, 1));
  }
  return ctype_digit($input);
}

【讨论】:

  • @Anurag,已编辑(尽管如果您真的关心这些东西,正则表达式可能更简单)。
  • 如果您想检查负整数,请添加 abs() 的使用,例如 ctype_digit(abs($str)) 而不仅仅是 ctype_digit
  • @enchance abs('definitelynotanint') === 0。此外,ctype_digit 只接受字符串
  • 这是不正确的。 PHP 中的大整数是双精度数!
  • 请注意,这将检测带有前导零作为整数的字符串,以及可能以 0 开头且不应作为整数值处理的电话号码和邮政编码。
【解决方案2】:

filter_var 应该这样做:

var_dump(filter_var('2', FILTER_VALIDATE_INT));   // 2
var_dump(filter_var('2.0', FILTER_VALIDATE_INT)); // false
var_dump(filter_var('2.1', FILTER_VALIDATE_INT)); // false

但是

var_dump(filter_var(2, FILTER_VALIDATE_INT));     // 2
var_dump(filter_var(2.0, FILTER_VALIDATE_INT));   // 2
var_dump(filter_var(2.1, FILTER_VALIDATE_INT));   // false

如果您只想将布尔值作为返回值,请将其包装到一个函数中,例如

function validatesAsInt($number)
{
    $number = filter_var($number, FILTER_VALIDATE_INT);
    return ($number !== FALSE);
}

【讨论】:

  • 我喜欢大多数答案,但我认为这个是最优雅的。
  • @grenoult 3v4l.org/qVRRS 为字符串和整数提供 int 0,所以不知道为什么你认为它不起作用。您是否将结果与== 进行比较?
  • @Gordon 我的错,我确实只是在与if3v4l.org/IAvCF进行比较
  • 这会做一些奇怪的事情,比如为“+123”返回true。它旨在返回真正的 int,但它仍然可能不是人们想要的,这是一个严格的 int 检查。
  • @MohammedRédaOUASSINI OP 要求验证 字符串,而不是浮点数。如果您传入“-1.0”(一个字符串)它工作如果您传入-1.0(一个浮点数)它将工作,但这不是要求开始。见3v4l.org/bOX6X
【解决方案3】:

+1 对多米尼克的回答(使用 ctype_digit)。另一种方法是使用类型强制:

$inty = "2";
$inty2 = " 2";
$floaty = "2.1";
$floaty2 = "2.0";

is_int($inty + 0); // true
is_int($floaty + 0); // false
is_int($floaty2 + 0); // false

// here's difference between this and the ctype functions.
is_int($inty2 + 0);  // true
ctype_digit($inty2); // false

【讨论】:

  • +1 也给你(虽然我想知道通过修剪输入字符串是否会更清楚地处理这种特殊情况)。
  • 此方法不适用于非数字字符串:is_int("abc"+0) 为真
  • 没错,它不适用于非数字字符串...is_int($inty + 0) &amp;&amp; is_numeric($inty) 怎么样(我知道这是一个懒惰的解决方案,但适用于大多数意图和目的...
  • 使用类型判断将导致非常松散的检查,其中整数可以以各种字符串方式表示,这不是字符串检查。您也不需要 +0。你可以简单地 +$var.
【解决方案4】:

将其转换为 int。 如果它仍然具有相同的值,则它的 int;

function my_is_int($var) {
  $tmp = (int) $var;
  if($tmp == $var)
       return true;
  else
       return false;
}

【讨论】:

  • 甚至更短:return $var == (int) $var;
  • @AI.G.如果演员表失败会发生什么
  • 这非常接近,如果不需要的话,应该避免类型杂耍。如果 $var 是“123xxxx”,这将起作用。
【解决方案5】:

我喜欢使用的一种非常干净的方式就是这种方式。你投了两次,第一次在int,第二次在string,然后你严格比较===。请看下面的例子:

$value === (string)(int)$value;

现在,关于你的函数 my_is_int,你可以这样做:

function my_is_int($value){ return $value === (string)(int)$value; }
my_is_int('2');  // true
my_is_int('2.1') // false

【讨论】:

  • 这将在带有前导零的整数上失败,例如05
  • 因为我也不认为05 是一个整数,例如值five。请阅读这篇文章以了解我的意见。 stackoverflow.com/questions/33444219/…
  • 如果您正在解析用户输入,尤其是以表格形式插入的用户输入,通常会发现用于填充的前导零(001002、...、075125)。这就是我想指出的原因。
【解决方案6】:

最近需要一个强大的is_int。我发现 intval() 太不可预测了:

intval(array('foo', 'bar')) //returns 1 ?!?
intval("2dog") //returns 2 even though the value is definitely not an integer
intval("dog2") //also returns 2


在 PHP 文档 cmets 中遇到了这个 sn-p,经过测试,它几乎涵盖了你扔给它的所有内容:

function my_is_int($s) {
    return (is_numeric($s) ? intval($s) == $s : false);
}


my_is_int(2); //true
my_is_int("2"); //true
my_is_int(2.1); //false
my_is_int("2.1"); //false
my_is_int("dog"); //false
my_is_int("2dog"); //false
my_is_int("dog2"); //false
my_is_int(array('foo', 'bar')); //false
my_is_int(array(1)); //false


但要小心:

my_is_int(2.0); //true
my_is_int("2.0"); //true

【讨论】:

  • 从你的代码中我知道了:$idInt = (int)$id;$isInt = $idInt &gt; 0 &amp;&amp; (string)$idInt === $id;
【解决方案7】:
/**
 * Check if a number is a counting number by checking if it
 * is an integer primitive type, or if the string represents
 * an integer as a string
 */
function is_int_val($data) {
    if (is_int($data) === true) return true;
    if (is_string($data) === true && is_numeric($data) === true) {
        return (strpos($data, '.') === false);
    }
}

Source.

【讨论】:

  • 与其把我的代码分散在很少的实用功能上,我宁愿有一些内置在 php 中的东西。
  • 我也不喜欢这些技巧。但是使用这种方法或 Dominic 提出的 ctype 建议,您无论如何都要将所有实现封装在一个方法中。在使用 php 时,我总是有一个“Util”类来解决这些问题。
  • elseif 可以只是if,因为你已经在上面的语句中返回了。
  • 最后也不需要返回false。
  • 如果$data 是一个对象,这将返回null。最好在最后加上return false;
【解决方案8】:
function my_is_int($var) {
    return preg_match('/^\d+$/', $var);
}

【讨论】:

  • 我使用了这个的变体,允许数字信号:'/^[-+]?[0-9]+$/'
  • 这和ctype_digit一样,它也允许尾随换行。
【解决方案9】:

我正在使用这个:

function isInt($val){

    return (filter_var($val, FILTER_VALIDATE_INT) !== false && strpos($val, '-') === false);

}

var_dump (isInt("1"));

【讨论】:

    【解决方案10】:

    我设计了一种在任何地方都找不到的方法,所以我把它放在这里:

    事不宜迟:ctype_digit((string) abs($input))

    示例:

    function means_int($input) {
        return ctype_digit((string) abs($input));
    }
    
    $list = array(
        0,
        '0',
        1,
        '1',
        1.1,
        '1.1',
        2.0,
        '2.0',  
        2.6,
        '2.6',
        -4,
        '-4',   
        -3.2,
        '-3.2',
        -30.02,
        '-30.02',   
        100.00,
        '100.00',   
    );
    
    foreach ($list as $x) {
        var_dump($x);
        var_dump(means_int($x));
        echo PHP_EOL;
    }
    

    结果:(我想和预期的一样)

    int(0)
    bool(true)
    
    string(1) "0"
    bool(true)
    
    int(1)
    bool(true)
    
    string(1) "1"
    bool(true)
    
    float(1.1)
    bool(false)
    
    string(3) "1.1"
    bool(false)
    
    float(2)
    bool(true)
    
    string(3) "2.0"
    bool(true)
    
    float(2.6)
    bool(false)
    
    string(3) "2.6"
    bool(false)
    
    int(-4)
    bool(true)
    
    string(2) "-4"
    bool(true)
    
    float(-3.2)
    bool(false)
    
    string(4) "-3.2"
    bool(false)
    
    float(-30.02)
    bool(false)
    
    string(6) "-30.02"
    bool(false)
    
    float(100)
    bool(true)
    
    string(6) "100.00"
    bool(true)
    

    【讨论】:

    • abs 正在将输入从字符串转换为数字。和 is_int(+$var) 一样。
    【解决方案11】:

    你可以只检查一个数字,如果它是然后检查而不是给铸造一个双精度:

    ((is_numeric($var) && !is_double(1*$var)));
    

    仅用于正数:

    (is_numeric($var) && !is_double(1*$var)) && ($var >= 0)
    

    检查:

    $numbersToCheck = array("a", "-1", "1", "1.0", "1.2");
    
    foreach ($numbersToCheck as $var) {
        echo $var . " is integer? ";var_dump((is_numeric($var) && !is_double(1*$var)));
    
        echo $var . " is a positive integer? ";var_dump((is_numeric($var) && !is_double(1*$var)) && ($var >= 0));
    }
    

    输出:

    a is integer? bool(false)
    a is a positive integer? bool(false)
    -1 is integer? bool(true)
    -1 is a positive integer? bool(false)
    1 is integer? bool(true)
    1 is a positive integer? bool(true)
    1.0 is integer? bool(false)
    1.0 is a positive integer? bool(false)
    1.2 is integer? bool(false)
    1.2 is a positive integer? bool(false)
    

    【讨论】:

    • is_numeric() 是我要找的。​​span>
    • 为了确保这是您想要的,您需要阅读 PHP 源代码,因为它没有很好的文档记录。例如, is_numeric 接受前导空格,这不是 PHP 手册中记录的内容。您还应该记住,太大而无法用本机 int 表示的字符串整数将转换为浮点数。
    【解决方案12】:

    试试这个:

    $string='12abc';
    if ((int)$string==$string) var_dump((int)$string); else echo 'Invalid!';
    // Outputs: Invalid!
    
    $string='789';
    if ((int)$string==$string) var_dump((int)$string); else echo 'Invalid!';
    // Outputs: int 789
    
    $string='345.00';
    if ((int)$string==$string) var_dump((int)$string); else echo 'Invalid!';
    // Outputs: 345
    
    $string='123.01';
    if ((int)$string==$string) var_dump((int)$string); else echo 'Invalid!';
    // Outputs: Invalid!
    

    如果您的 $string 有小数位,也可以使用

    【讨论】:

    • 这会将 123xxxx 视为有效的 int 字符串。
    【解决方案13】:

    这也会处理负数

    function myIsInt()
    {
       return (is_numeric($var) AND (is_int($var) OR ctype_digit(trim($var, '-'))))
    }
    //'234-' => false
    //'-234' => true
    //'--234' => false
    //'234' => true
    

    【讨论】:

    • 我不明白为什么这会为 234- 或 --234 返回 false,你测试了吗?这将为 -----1234---- 返回 true
    【解决方案14】:
    function my_is_int($var){
        return is_numeric($var) && gettype($var+0)=='integer';
    }
    

    【讨论】:

      【解决方案15】:

      也许不是最高效的方式。但是你可以写成一行。

      function my_is_int($input) {
          return intval($input).'' === $input.'';
      }
      

      如预期:

          my_is_int(1);     // TRUE
          my_is_int(-1);    // TRUE
          my_is_int(1.2);   // FALSE
          my_is_int("1");   // TRUE
          my_is_int("-1");  // TRUE
          my_is_int("1.2"); // FALSE
          my_is_int(0);     // TRUE
          my_is_int(null);  // FALSE
      

      明白了:

          my_is_int(1.0);   // TRUE
          my_is_int("1.0"); // FALSE
      

      【讨论】:

      • 这个是正确的,只要你保证$input是字符串类型就行了。
      【解决方案16】:

      晚了几年,但根据这里给出的答案,我想出了一个比大多数其他答案更准确(特别是在布尔值上)和更有效(我认为)的解决方案:

      function my_is_int($s) {
          return ctype_digit($s) || is_int($s);
      }
      

      按预期工作:

      my_is_int(2);                   // true
      my_is_int("2");                 // true
      my_is_int(-2);                  // true
      my_is_int(2.0);                 // false
      my_is_int("2.0");               // false
      my_is_int(2.1);                 // false
      my_is_int("2.1");               // false
      my_is_int("dog");               // false
      my_is_int("2dog");              // false
      my_is_int("dog2");              // false
      my_is_int(array('foo', 'bar')); // false
      my_is_int(array(1));            // false
      my_is_int(true);                // false
      my_is_int(false);               // false
      my_is_int("true");              // false
      my_is_int("false");             // false
      my_is_int("0x101010");          // false
      

      也许除了这两个:

      my_is_int(0x101010);            // true
      my_is_int("-2");                // false
      

      【讨论】:

      • 非常好。如果您想处理带有负号的数字字符串,您可以更改为 ctype_digits(preg_replace('/^-/', '', $s)),尽管这开始有点冗长。另外,0x101010 是一个 int,所以这不是错误,而是“0x101010”可能被认为是不正确的,而且我确信匹配二进制文字表示法(“0b11111”)的二进制字符串也会失败
      【解决方案17】:

      这是一个使用is_numericfloatvalintval 的简单解决方案:

      function is_string_an_int($string)
      {
          if (is_string($string) === false)
          {
              //throw some kind of error, if needed
          }
      
          if (is_numeric($string) === false || floatval(intval($string)) !== floatval($string))
          {
              return false;
          }
      
          else
          {
              return true;
          }
      }
      

      结果:

      is_string_an_int('-1'); //true
      is_string_an_int('-1.0'); //true
      is_string_an_int('-1.1'); //false
      is_string_an_int('0'); //true
      is_string_an_int('0.0'); //true
      is_string_an_int('0.1'); //false
      is_string_an_int('1'); //true
      is_string_an_int('1.0'); //true
      is_string_an_int('1.1'); //false
      is_string_an_int('' . PHP_INT_MAX); //true
      is_string_an_int('foobar'); //false
      is_string_an_int('NaN'); //false
      is_string_an_int('null'); //false
      is_string_an_int('undefined'); //false
      

      请注意,大于 PHP_INT_MAX 的值可能返回 false。

      【讨论】:

        【解决方案18】:

        完美运行!希望对你有帮助=)

        $value = 1; // true
        $value = '1'; // true
        $value = '1.0'; // true
        $value = ' 1'; // true
        $value = '01'; // true
        
        $value = -1; // true
        $value = '-1'; // true
        $value = '-1.0'; // true
        $value = ' -1'; // true
        $value = '-01'; // true
        
        $value = PHP_INT_MIN; // true
        $value = PHP_INT_MAX; // true
        $value = 0x000001; // true
        
        $value = 'a'; // false
        $value = '1a'; // false
        $value = 'a1'; // false
        $value = 1.1; // false
        $value = '1.1'; // false
        $value = '--1'; // false
        $value = []; // false
        $value = [1,2]; // false
        $value = true; // false
        $value = false; // false
        $value = null; // false
        $value = 'NaN'; // false
        $value = 'undefined'; // false
        
        function isInt($value) {
            return is_numeric($value) && floatval(intval($value)) === floatval($value);
        }
        

        【讨论】:

        • 在回答一个老问题时,如果您包含一些上下文来解释您的答案如何提供帮助,那么您的答案将对其他 StackOverflow 用户更有用,特别是对于已经有一个已接受答案的问题。请参阅:How do I write a good answer
        【解决方案19】:

        怎么样:

        function isIntStr($str) {
           return preg_match('/^(-?\d+)(?:\.0+)?$/', trim($str), $ms)
               && bcComp($ms[1], PHP_INT_MAX) <= 0
               && bcComp($ms[1], -PHP_INT_MAX - 1) >= 0;
        }
        

        这个函数应该只对任何可以使用(int)intval() 转换为int 而不会丢失任何数学意义的字符串数字返回true(例如小数点后的非零或PHP 整数范围之外的数字)同时接受在数学上不重要的东西(例如空格;前导零;或者,小数点后的零)。

        它将为 '10.' 返回 false,但不会为 '10.0' 返回。如果您希望'10.' 为真,您可以将正则表达式中0 后面的+ 更改为*

        【讨论】:

          【解决方案20】:

          这里有一些我用过的代码似乎运行良好,并且没有其他许多代码存在的任何问题。

          if (0 != strlen(str_replace(range(0, 9), '', $TestInt))) { print 'Not an integer!';}
          

          它不检查顺序等,因此不适用于负整数,但使用上面的一些其他想法也可以完成一些加法代码。它还可以适应二进制array('0', '1') 或十六进制等。

          【讨论】:

          • 这只是一个非常昂贵的ctype_digit。
          【解决方案21】:

          看到这个。将 $val 转换为整数,然后检查转换为字符串的原始 $val 是否相同 (===) - 只是 == 不会按预期工作 - 转换为字符串的整数 val。

          function validInt($val, $min=null, $max=null) {
              $ival = intval($val);
              //echo "'$ival' '$val'<br>\n"; // Uncomment to see the comparisons done in below if block
              if(''.$ival !== ''.$val) {
                  return false;
              }
              if($min !== null && $ival < $min)
                  return false;
              if($max !== null && $ival > $max)
                  return false;
              return true;
          }
          

          如果您不检查字符串值,它可能无法按预期工作:

          $nums = array(
              '1',
              '+1',
              '-1',
              '01',
              '1.0',
              '.0',
              '1.123',
              'a123',
              '0x101010',
              1,
              -1,
              01,
              1.0,
              .0,
              1.123,
              0x101010,
          );
          foreach($nums as $num) {
              if(validInt2($num))
                  echo $num." - Valid integer.<br>\n";
              else
                  echo $num." - Not a valid integer.<br>\n";
          }
          

          输出:

          1 - Valid integer.
          +1 - Not a valid integer.
          -1 - Valid integer.
          01 - Not a valid integer.
          1.0 - Not a valid integer.
          .0 - Not a valid integer.
          1.123 - Not a valid integer.
          a123 - Not a valid integer.
          0x101010 - Not a valid integer.
          1 - Valid integer.
          -1 - Valid integer.
          1 - Valid integer.
          1 - Valid integer.
          0 - Valid integer.
          1.123 - Not a valid integer.
          1052688 - Valid integer.
          

          原因是即使您使用十六进制 (0x101010)、八进制 (01) 或存储为浮点数 (1.0, 0.0) 的整数,内部都存储为浮点数。但是,如果您使用该函数检查存储为字符串的 int,它将起作用。

          【讨论】:

            【解决方案22】:
            public static function isNumeric($value, $negativ = false) {
                return is_int($value) || is_string($value) && (
                    ctype_digit($value) || (
                        $negativ && $value{0} == '-' && ctype_digit(substr($value, 1))
                    )
                );
            
                //alternativ:
                //return $value == (int) $value;
            }
            

            【讨论】:

            • 缺少对字符串 !== '' 的检查。如果你将一个非常长的整数放入其中,它也会返回 true,因为 PHP 会强制转换为浮点数!
            【解决方案23】:

            您可以使用以下条件。请注意,您不应该使用 !==

            $value = 12; // true
            $value = '12'; // true
            $value = 'abc'; // false
            $value = 12.1; // false
            $value = '12.1'; // false
            
            if (!is_numeric($value) || (int) $value != (float) $value) {
                echo "false";
            } else {
                echo "true";
            }
            

            【讨论】:

              【解决方案24】:

              如果你想真正知道一个字符串是否是真正 PHP 整数类型的有效表示......

              in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
              

              但是,由于集合太大,这是不可能运行的(在这种情况下将不适合内存,如果您进行循环,则会占用太多 CPU 周期)。

              您也许可以使用字符串比较进行二分搜索,但还有更好的方法。

              最简单的是:

              strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
              

              还有一些其他不寻常的方法来处理它,例如:

              is_int(array_keys([$string => null])[0])
              

              你也可以做字符串比较,但你仍然需要做 ctype_digit 之类的事情,检查长度是否合理(在做 ctype_digit 之类的事情之前不要浪费 CPU),并且对负数有一些尴尬的处理。

              请注意,filter_var 没有正确断言字符串是真正的 PHP 整数表示。它将允许前导 + 和周围的空格。

              PHP 在内部使用函数“_zend_handle_numeric_str”进行严格比较,但它不会直接在任何地方公开它,因此使用数组键的技巧(它确实使用它将表示 PHP 整数的任何字符串转换为 PHP整数)。

              如果您想要与 PHP 进行二进制安全转换,这是可以采用的方法。

              不是每个人都可能想要这样,这可能是处理用户输入的情况。 filter_var 还不错,而且在大多数情况下对于 PHP 新手来说是相当安全的。

              长度检查、ctype_digit 以及转换后的值是否在一个范围内的检查对于用户输入来说也是相当可靠的。更复杂的方案可能需要修剪或正则表达式。

              在这方面,很多答案的问题在于,虽然问题含糊不清,但答案不应该如此。如果你要提出一个解决方案,你应该能够准确地解释它会和不会期望什么。没有它,就无法判断答案是否与问题匹配或是否安全。 PHP 手册并不总是有帮助,因为它没有解释它提供的每个相关方法的所有注意事项。诸如 ctype_digit 和 is_int 之类的东西非常可靠且易于预测,但 is_numeric、filter_var 和杂耍 (+$var) 或强制转换 (intval/floatval) 的细节记录很少。

              这是给你的 PHP 软糖。它有无数用于将字符串解释为整数的模式,但存在不一致的情况。验证整数字符串的最严格方法不会直接暴露给用户。

              【讨论】:

                【解决方案25】:

                如果您正在处理来自 mysql 的数字 ID,并试图对其进行验证以使其成为有效的非零 intint,但采用字符串格式(mysql 始终以字符串格式返回所有内容)而不是NULL。您可以使用以下内容。这是我发现的仅允许int/string-ints 的最错误/警告/通知证明方式。

                ...
                if(empty($id) || !is_scalar($id) || !ctype_digit($id)){
                  throw("Invalid ID");
                }
                ...
                

                【讨论】:

                  【解决方案26】:

                  这是一个有效的 1 行示例:

                  <?php
                  // combination of is_int and type coercion
                  // FALSE: 0, '0', null, ' 234.6',  234.6
                  // TRUE: 34185, ' 34185', '234', 2345
                  $mediaID =  34185;
                  if( is_int( $mediaID + 0) && ( $mediaID + 0 ) > 0 ){
                      echo 'isint'.$mediaID;
                  }else{
                      echo 'isNOTValidIDint';
                  }
                  ?>
                  

                  【讨论】:

                    【解决方案27】:

                    可以使用 is_numeric() 然后检查是否存在“。”在字符串中(虽然对文化不是特别敏感)。

                    或者使用 is_numeric() 然后转换为双精度并查看 $var == floor($var) (如果它是整数,则应返回 true)。

                    【讨论】:

                    • 这是识别语言环境变化的唯一答案,它也改变了 PHP 解释和输出数字的方式。对 setlocale 和对分隔符做出假设的解决方案要非常小心。
                    猜你喜欢
                    • 1970-01-01
                    • 2011-11-10
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-02-20
                    • 2014-04-30
                    • 2016-12-21
                    • 1970-01-01
                    • 2021-08-14
                    相关资源
                    最近更新 更多