如何将每个示例字符串中的前导字母与尾随数字分开,并从数字中删除不需要的零填充?
$ab = "A00000001"
echo $a; // gives result "A"
echo $b; // gives result "1"
$ab = "B01250"
echo $a; // gives result "B"
echo $b; // gives result "1250"
这更短,如果这就是您所说的“简单的单一方式”的意思:
list($a,$b) = preg_split('/0+/',$ab);
如果您愿意,请调整您的正则表达式: http://us.php.net/manual/en/function.preg-split.php
$ab = "A0000000001";
$a = substr( $ab, 0, 1 );
$b = (int)substr( $ab, 1 );
有关 substr 的更多信息可以在这里找到:http://us.php.net/substr
您可以使用正则表达式来做到这一点:
$match = preg_match('@^(\w+)(\d+)@', $input);
$letter = $match[1];
$number = $match[2];
最灵活、直接且考虑类型的方法是使用
sscanf()
。该函数(及其“格式”表达式)将允许匹配 1 个或多个大写字母,后跟一个可能用零填充的整数。
输出将是一个 2 元素数组,其中包含前导字母字符串,然后是一个 int 类型数字。这对于喜欢在应用程序中维护干净、严格的数据类型的专业开发人员来说非常有用。
代码:(演示)
$tests = ['A00000001', 'B01250'];
foreach ($tests as $test) {
var_export(sscanf($test, '%[A-Z]%d'));
echo "\n";
}
输出:
array (
0 => 'A',
1 => 1,
)
array (
0 => 'B',
1 => 1250,
)
sscanf()
还允许通过参数声明/填充变量。 (演示)
sscanf($test, '%[A-Z]%d', $a, $b);
var_export(['a' => $a, 'b' => $b]);