今天我遇到了这个问题,如何从随机输入中拆分/区分str和int?例如,我的用户可以输入如下:-
- A1 > str:A, int:1
- AB1 > str:AB, int:1
- ABC > str:ABC, int:1
- A12 > str:A, int:12
- A123 > str:A, int:123
我当前的脚本使用 substr(input,0,1) 来获取 str 和 substr(input,-1) 来获取 int,但是如果输入 case 2,3,4,5 或任何其他样式的用户输入
谢谢
今天我遇到了这个问题,如何从随机输入中拆分/区分str和int?例如,我的用户可以输入如下:-
我当前的脚本使用 substr(input,0,1) 来获取 str 和 substr(input,-1) 来获取 int,但是如果输入 case 2,3,4,5 或任何其他样式的用户输入
谢谢
list($string, $integer) = sscanf($initialString, '%[A-Z]%d');
使用如下的正则表达式。
// $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
。因此,您正在寻找的东西很长并且出现或不出现
我建议您使用正则表达式来识别和匹配字符串和数字部分:类似于
if (!preg_match("/^.*?(\w?).*?([1-9][0-9]*).*$/", $postfield, $parts)) $parts=array();
if (sizeof($parts)==2) {
//$parts[0] has string
//$parts[1] has number
}
将默默地忽略无效部分。您仍然需要验证零件的长度和范围。
这个怎么样?常用表达
$str = 'ABC12';
preg_match('/[a-z]+/i', $str, $matches1);
preg_match('/[0-9]+/', $str, $matches2);
print_r($matches1);
print_r($matches2);