2013-05-29 104 views
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(輸入,0,1)獲得STR和SUBSTR(輸入,-1),以獲得INT,但如果具有2,3,4,5的情況下輸入或用戶輸入的任何其他人的風格,它會給錯誤

感謝

+0

只需使用一些[pregmatch(http://php.net/manual/en/function.preg-match.php)函數來找到一些數字(0-9 ^^) – JoDev

+1

這有已經被它的樣子回答了:[1] [1]:http://stackoverflow.com/questions/5474088/php-regular-expression-filter-number-only – jimmy

+0

@jimmy - dunno如果你錯過了鏈接,但這不是什麼一樣的問題 –

回答

8
list($string, $integer) = sscanf($initialString, '%[A-Z]%d'); 
+0

那麼有趣... – Ascherer

+0

http://php.net/manual/en/function.sscanf.php那些想知道 – Ascherer

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。所以,你正在尋找討價還價是什麼過長並出現或不

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 
} 

會默默地忽略隱藏部分。您仍然需要驗證部件的長度和範圍。

1

這個怎麼樣?正則表達式

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

print_r($matches1); 
print_r($matches2); 
相關問題