1

今天我遇到了这个问题,如何从随机输入中拆分/区分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

我当前的脚本使用 substr(input,0,1) 来获取 str 和 substr(input,-1) 来获取 int,但是如果输入 case 2,3,4,5 或任何其他样式的用户输入

谢谢

4

4 回答 4

8
list($string, $integer) = sscanf($initialString, '%[A-Z]%d');
于 2013-05-29T15:18:30.420 回答
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。因此,您正在寻找的东西很长并且出现或不出现

于 2013-05-29T15:17:44.430 回答
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
}

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

于 2013-05-29T15:21:46.627 回答
1

这个怎么样?常用表达

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

print_r($matches1);
print_r($matches2);
于 2013-05-29T15:35:48.797 回答