我有一个包含70000多条记录的数据库,其主键值从1位数开始。
所以我希望用户必须在url中输入nm0000001
而不是1
。在代码部分,我必须丢弃除1
之外的其余值。
但我的问题是我希望这种类型的东西在字符串中有9个字母,模式就像这样
1 - nm0000001
9 - nm0000009
10 - nm0000010
2020 - nm0002020
从上面的模式我只想在php中使用像1,9,10,2020
这样的数字。
答案 0 :(得分:5)
下面:
$i = (int)substr($input, 2);
根本没有理由使用正则表达式。
无论如何,如果你坚持使用正则表达式,那么:
$input = 'nm0002020';
preg_match('~0*(\d+)$~', $input, $matches);
var_dump($matches[1]);
答案 1 :(得分:3)
假设URL中的值是作为查询字符串参数接收的,即通过$_GET['id']
或id
之外的其他名称传递:
// Trim the "nm" off the front
$pk = substr($_GET['id'],2);
// And parse out an integer value.
$id = intval($pk);
答案 2 :(得分:2)
在这里绝对没有使用正则表达式 - 使用sprintf("nm%07d", ...)
格式化substr
并使用强制转换为int来解析。
答案 3 :(得分:0)
这个功能可以解决问题:
function extractID($pInput)
{
$Matches = array();
preg_match('/^nm0*(.*)$/', $pInput, $Matches);
return intval($Matches[1]);
}
这就是/^nm0+(.*)$/
工作的原因:
^
nm
)
0
nm0
之后的第一个非零字符...,捕获值(这是括号的工作)$
)