2010-11-28 28 views
1

我正在嘗試創建序列號檢查器。序列號檢查器

序列號是在範圍
A87594 - A92778
AB34534 - AC23405
B23933 - C344444

我能得到的數字使用範圍()第一個序列號,例如工作,我猜我需要使用explode(),但我不確定如何將字母分解爲變量並將數字分解爲單獨的變量。

if($_POST['submit']) { 

    $snum = $_POST['serial_number']; 

    // 1952 
    $jan01_jan07 = range(87594, 92478); 

    if (in_array($snum, $jan01_jan07)) { 
     echo 'You have a 1952 Widget'; 
    } 
    else { 
     echo 'Your serial number is unknown'; 
    } 
} 
+1

您應該使用算術比較運算符來代替`range()`中的`in_array()`,特別是因爲範圍可以是一個非常大的數組。 – BoltClock 2010-11-28 04:40:21

回答

1

你可以嘗試使用strcmp,因爲它會檢查兩個字符串,因此您可以檢查傳入數據是否等於或大於下限且小於或等於上限,如下所示:

$data = $_POST['data']; // change this accordingly 

if(strcmp($data, $lowerBound) >= 0 && strcmp($data, $upperBound) <= 0) { 
    // successful match 
} 

由於strcmp返回-1,0,1,如果$ data之前,與$ lowerBound(字典有序)相同,並且之後,所以這也適用於字符串。

0

試試沿着這些線路:

preg_match('/([A-C]+)(\d+)/', $serial, $matches); 
list(, $characters, $numbers) = $matches; 

從那裏是一種取決於支配你的連續精確的規則,這些方針的東西應該做的:

if ($characters == 'A' && 87594 <= $numbers && $numbers <= 92778) { 
    return true; 
} else if ($characters == 'AB' …) ...