2010-11-28 17 views
1

シリアル番号チェッカーを作成しようとしています。 A92778
AB34534 - - AC23405
B23933 - シリアル番号チェッカー

シリアル番号が範囲
A87594である

C344444

Iは、数字が最初のシリアル番号、例えば範囲()を使用して仕事を得ることができました私はを使って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

+0

例を挙げてください。 – ZaneDeFazio

+0

'if($ snum> = 87594 && $ snum <92478)' – BoltClock

答えて

1

あなたは2つの文字列をチェックするので、strcmpを使用して試すことができます。これにより、着信データが下限以上で、上界以下であるかどうかを確認できます。

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

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

としてのstrcmp -1を返し、0、1 $データは、前に$下界(辞書が注文)や後に同じであるので、これは同様に、文字列のために動作するかどうか。

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' …) ... 
関連する問題