2011-05-17 45 views
2

我有一個包含70000多條記錄的數據庫,它的主鍵值從1個單一數字開始。如何在php中使用正則表達式下面的東西php

所以我想用戶必須輸入nm0000001而不是1在url.And代碼部分我不得不放棄除1以外的其餘值。

但我的問題是,我想這種類型的具有字符串中9個字母的東西和模式是這個樣子

1 - nm0000001 
9 - nm0000009 
10 - nm0000010 
2020 - nm0002020 

而且從上面的圖案,我想只有像在PHP 1,9,10,2020數字。

回答

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); 
+0

我認爲他的問題是,他不知道0結束和實際ID開始。這就是他試圖使用正則表達式的原因。 – 2011-05-17 13:29:36

+2

@Zach無所謂。如果您從前面修剪nm,則無論前面有多少個零填充,「intval」都會將其餘的數字轉換爲適當的整數。例如:'echo intval(「000023345」);'打印'23345'。 – 2011-05-17 13:32:16

+0

原本是我的想法。儘可能避免使用正則表達式! – 2011-05-17 13:44:46

5

這裏:

$i = (int)substr($input, 2); 

沒有任何理由使用正則表達式。

無論如何,如果你堅持使用正則表達式,則:

$input = 'nm0002020'; 
preg_match('~0*(\d+)$~', $input, $matches); 
var_dump($matches[1]); 
+0

我想你沒有得到的結束我的question.Im不提的是,出發從2開始的位置 – pravat231 2011-05-17 13:20:26

+1

@ pravat231「從2開始的位置」從頭開始修剪「nm」 – 2011-05-17 13:21:41

+1

@ pravat231:好吧,我按照你如何描述它的方法得到它。看起來像其他兩個人以同樣的方式得到它。所以你需要改變你的問題來獲得另一個答案。 – zerkms 2011-05-17 13:22:15

2

但絕對在這個沒有使用正則表達式 - 使用sprintf("nm%07d", ...)格式化,只是substr和鑄造爲int解析。

0

此功能將這樣的伎倆:

function extractID($pInput) 
{ 
    $Matches = array();  
    preg_match('/^nm0*(.*)$/', $pInput, $Matches); 
    return intval($Matches[1]); 
} 

這裏的原因/^nm0+(.*)$/作品:

  1. 行必須啓動(^)恰好與一個nm
  2. 模式必須持續至少一個0
  3. 在之後的第一個非零字符...,捕捉值(這是括號中的工作)
  4. 繼續,直至線($
+0

當他將達到7位數的標識符時,這個正則表達式將失敗 – zerkms 2011-05-17 13:31:01

+0

我編輯它。不再! – 2011-05-17 13:33:54

+1

我會使用'#^ nm0 *(\ d +)$#' – binaryLV 2011-05-17 13:46:26