首頁  >  文章  >  後端開發  >  PHP正規表示式實戰:匹配ISBN碼

PHP正規表示式實戰:匹配ISBN碼

王林
王林原創
2023-06-23 08:20:531145瀏覽

ISBN碼是一本書的唯一識別碼,用來識別國際標準書號。 ISBN碼通常由13位數字組成,其中最後一位是根據前面12位數字計算出來的校驗碼。在PHP中,我們可以使用正規表示式來匹配ISBN碼,以確保其正確性。

ISBN碼的格式如下:

ISBN13:978-7-111-40543-9

其中,前三位為EAN國家代碼,第四到第六位為出版社代碼,第七到第十二位為書的編號,最後一位為校驗碼。校驗碼的計算方式可以參考這個連結:https://zh.wikipedia.org/wiki/International_Standard_Book_Number#EAN/UCC-地理碼和校驗碼。

我們可以使用正規表示式來符合ISBN13碼,如下:

$pattern = '/^978-[d]{1,5}-[d]{1,7}-[d]{1,6}-[dX]$/';

其中,"^"和"$"表示字串的開頭和結尾;"[d]"表示任意一個數字,"{1,5}"表示該數字重複1到5次;"[dX]"表示任一個數字或字母X。

我們來看一個完整的PHP程式碼實作:

<?php
function checkISBN($isbn) {
    $pattern = '/^978-[d]{1,5}-[d]{1,7}-[d]{1,6}-[dX]$/';
    if (preg_match($pattern, $isbn)) {
        $digits = str_replace('-', '', substr($isbn, 0, -1));
        $length = strlen($digits);
        $sum = 0;
        for ($i = 0; $i < $length; $i++) {
            $sum += intval($digits[$i]) * (($i % 2 == 0) ? 1 : 3);
        }
        $checkDigit = 10 - ($sum % 10);
        if ($checkDigit == 10) {
            $checkDigit = 'X';
        }
        return $checkDigit == substr($isbn, -1);
    } else {
        return false;
    }
}

$isbn = '978-7-111-40543-9';
if (checkISBN($isbn)) {
    echo $isbn . ' is a valid ISBN!';
} else {
    echo $isbn . ' is not a valid ISBN!';
}

?>

這段程式碼中,我們定義了一個名為checkISBN的函數,該函數接收一個ISBN碼作為參數。函數內部先使用正規表示式對ISBN碼進行格式校驗,然後根據前12位數字計算校驗碼,最後與原ISBN碼的校驗碼進行比較,以確定其是否有效。

我們可以將上述程式碼儲存為PHP文件,然後在命令列中執行,輸出結果為:

978-7-111-40543-9 is a valid ISBN!

如果改變$isbn的值為非法的ISBN碼,例如'978 -7-111-40543-0',則輸出結果為:

978-7-111-40543-0 is not a valid ISBN!

總結:

正規表示式是一個非常強大且靈活的工具,具有廣泛的適用性。在PHP中,我們可以使用正規表示式來進行字串的匹配和格式校驗等操作,其中對於ISBN碼的校驗也非常方便。開發者可以根據自己的實際需求,靈活運用正規表示式,提高程式碼效率和可維護性。

以上是PHP正規表示式實戰:匹配ISBN碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn