如何区分字符串和整数

时间:2013-05-29 15:15:09

标签: php

今天我遇到了这个问题,如何拆分/区分是str和来自随机输入的int?例如,我的用户可以输入如下: -

  1. A1> str:A,int:1
  2. AB1> str:AB,int:1
  3. ABC> str:ABC,int:1
  4. A12> str:A,int:12
  5. A123> str:A,int:123
  6. 我当前的脚本使用substr(input,0,1)来获取str和substr(input,-1)来获取int,但如果输入了案例2,3,4,5或任何内容,它将会出错其他用户输入风格

    由于

4 个答案:

答案 0 :(得分:8)

list($string, $integer) = sscanf($initialString, '%[A-Z]%d');

答案 1 :(得分:5)

使用如下的正则表达式。

// $input contains the input
if (preg_match("/^([a-zA-Z]+)?([0-9]+)?$/", $input, $hits))
{
    // $input had the pattern we were looking for
    // $hits[1] is the letters
    // $hits[2] holds the numbers
}

表达式将查找以下内容

^               start of line
([a-zA-Z]+)?    any letter upper or lowercase
([0-9]+)?       any number
$               end of line

(..+)?其中+表示“一个或多个”,而?表示0 or 1 times。因此,您正在寻找任何长期出现或不出现的行为

答案 2 :(得分:1)

我建议您使用正则表达式来识别和匹配字符串和数字部分:类似

if (!preg_match("/^.*?(\w?).*?([1-9][0-9]*).*$/", $postfield, $parts)) $parts=array();
if (sizeof($parts)==2) {
    //$parts[0] has string
    //$parts[1] has number
}

将默默忽略invlid部分。您仍然需要验证零件的长度和范围。

答案 3 :(得分:1)

这个怎么样?正则表达式

$str = 'ABC12';
preg_match('/[a-z]+/i', $str, $matches1);
preg_match('/[0-9]+/', $str, $matches2);

print_r($matches1);
print_r($matches2);