首頁 >後端開發 >php教程 >如何在 PHP 中使用正規表示式來驗證書籍 ISBN 編號格式

如何在 PHP 中使用正規表示式來驗證書籍 ISBN 編號格式

王林
王林原創
2023-06-22 09:07:341655瀏覽

正規表示式是一種強大的文字比對工具,可以有效驗證輸入的資料是否符合指定的格式要求。在圖書管理系統等應用程式中,ISBN(International Standard Book Number)號碼是值得關注的資料格式,其格式有一定的規則。在本文中,我們將介紹如何使用 PHP 中的正規表示式來驗證圖書 ISBN 號碼格式,以確保系統能夠正確地處理 ISBN 號碼相關的業務邏輯。

  1. ISBN 號碼格式規則

ISBN 號碼是用於唯一識別圖書的標準編號,通常包含 ISBN-10 和 ISBN-13 兩種格式。其中,ISBN-10 格式由 10 位數字組成,其中最後一位可能是 X;而 ISBN-13 格式由 13 位數字組成。在本文中,我們將主要關注 ISBN-13 格式,並透過正規表示式來驗證其格式是否正確。

ISBN-13 號碼的格式規則如下:

(1)前三位數字表示書籍所屬國別或語言區別,對於不同的國家或地區會有不同的前綴數字。例如,中國的前綴數字為 978 或 979。

(2)接下來的 9 位數字是書籍的註冊號碼,由出版社分配給每本書。

(3)最後一位數字是校驗碼(Check Digit),校驗碼的計算方法如下:

1)將前12 位數字依照權重加權求和,其中偶數位數字的權重為3,奇數位數字的權重為1;

2)將所得結果除以10 取餘數,得到的餘數用10 減去,所得差值即為校驗碼。

例如,書籍《PHP與MySQL開發從入門到精通》的ISBN-13 號碼為978-7-81037-609-2,其中前12 位數字的加權和為1×9 3×7 1×8 3×8 1×1 3×0 1×3 3×7 1×6 3×0 1×9 3×2=99,取餘數為9,用10 減去所得餘數得到1,即最後一位元校驗碼為1。

  1. 使用PHP 中的正規表示式驗證ISBN 號碼格式

為了驗證ISBN 號碼格式是否正確,我們可以使用PHP 中的正規表示式函數preg_match() ,其語法如下:

preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int|false

其中,$pattern 是正規表示式模式,$subject 是要匹配的字串,$matches 是匹配結果數組,$flags 是選項標誌,$offset 是起始匹配位置。當匹配成功時,函數傳回 1;當匹配失敗時,函數傳回 0。

以下是使用PHP 正規表示式驗證ISBN-13 號碼格式的範例程式碼:

function is_valid_isbn($isbn) {
    $pattern = '/^97[89]d{10}$/'; // 匹配 ISBN-13 号码格式的正则表达式
    if(preg_match($pattern, $isbn)) { // 使用 preg_match() 函数进行匹配
        $digits = str_split($isbn);
        $check_digit = 0; // 校验码的计算过程
        for($i=0; $i<12; $i+=2) {
            $check_digit += $digits[$i] + 3 * $digits[$i+1];
        }
        $check_digit = (10 - $check_digit % 10) % 10;
        return $digits[12] == $check_digit;
    }
    else {
        return false;
    }
}

// 验证 ISBN-13 号码格式
$isbn1 = '978-7-81037-609-1';
$isbn2 = '978-7-81037-609-2';
if(is_valid_isbn(str_replace('-', '', $isbn1))) {
    echo $isbn1.' 是一个有效的 ISBN-13 号码。';
}
else {
    echo $isbn1.' 不是一个有效的 ISBN-13 号码。';
}
if(is_valid_isbn(str_replace('-', '', $isbn2))) {
    echo $isbn2.' 是一个有效的 ISBN-13 号码。';
}
else {
    echo $isbn2.' 不是一个有效的 ISBN-13 号码。';
}

在上面的範例程式碼中,我們首先定義了一個名為is_valid_isbn() 的函數,其參數為要驗證的ISBN 號碼。此函數首先使用正規表示式來驗證 ISBN-13 號碼的格式是否正確,如果格式正確,則進行校驗碼的計算,並與最後一位數字進行比較,以判斷該 ISBN 號碼是否有效。其中,str_replace('-', '', $isbn) 的作用是刪除 ISBN 號碼中的短線分隔符,以便進行計算。

最後,我們可以對一些 ISBN 號碼進行測試,以驗證函數的有效性。當輸入的 ISBN 號碼格式正確且校驗碼計算正確時,函數會傳回 true;否則,傳回 false。透過這種方式,我們可以有效驗證輸入的 ISBN 號碼是否符合規則,確保系統能夠正確地處理 ISBN 相關的業務邏輯。

  1. 結論

本文介紹如何使用PHP 中的正規表示式來驗證圖書ISBN-13 號碼的格式是否正確,可以有效地判斷輸入資料是否符合規則。在實際開發中,我們可以根據實際需求來定義不同的正規表示式模式,以適應不同的資料格式驗證需求。正規表示式是一種非常強大的文字匹配工具,掌握正規表示式的使用技巧對於開發人員來說是至關重要的。

以上是如何在 PHP 中使用正規表示式來驗證書籍 ISBN 編號格式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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