1

我需要一个脚本来测试输入字段的内容以查看它是否包含 ISBN。我发现了一些这样的例子,但没有一个会去掉破折号。我需要这样做,否则我的搜索结果不起作用。如果该字段没有 ISBN,但无法使 ISBN 测试正常工作,我可以让脚本的 else 部分正常工作。预先感谢您的任何帮助!

function search() {
    var textboxdata = $('#search').val();
        if (textboxdata contains an ISBN number, strip it of dashes and) {
            // perform ISBN search
            document.location.href = "http://myurl?search=" + textboxdata;
        }
        else { //perform other search
        }
 }
4

4 回答 4

6

根据 Wikipedia 文章中给出的算法,这里有一个简单的 JavaScript 函数,用于验证 10 位和 13 位 ISBN:

var isValidIsbn = function(str) {

    var sum,
        weight,
        digit,
        check,
        i;

    str = str.replace(/[^0-9X]/gi, '');

    if (str.length != 10 && str.length != 13) {
        return false;
    }

    if (str.length == 13) {
        sum = 0;
        for (i = 0; i < 12; i++) {
            digit = parseInt(str[i]);
            if (i % 2 == 1) {
                sum += 3*digit;
            } else {
                sum += digit;
            }
        }
        check = (10 - (sum % 10)) % 10;
        return (check == str[str.length-1]);
    }

    if (str.length == 10) {
        weight = 10;
        sum = 0;
        for (i = 0; i < 9; i++) {
            digit = parseInt(str[i]);
            sum += weight*digit;
            weight--;
        }
        check = (11 - (sum % 11)) % 11
        if (check == 10) {
            check = 'X';
        }
        return (check == str[str.length-1].toUpperCase());
    }
}
于 2014-04-18T20:04:12.730 回答
2

还有一个 js 库可用于检查 ISBN10 和 ISBN13 格式:isbnjsisbn-verify


编辑 2/2/17 - 以前的链接是 Google 代码,一些更新的当前链接: - npm for isbn-verify - npm for isbnjs - Github project

于 2014-10-15T00:16:46.793 回答
1

看看这篇维基百科文章:

http://en.wikipedia.org/wiki/International_Standard_Book_Number

应该让您深入了解如何验证 ISBN 号。

于 2012-06-19T15:48:25.830 回答
1

此 ISBN 的 Derek 代码失败 ==> “0756603390”

这是因为校验位最终会是 11。

不正确 == > 检查 = 11 - (sum % 11); 正确 ==> 检查 = (11 - (sum % 11)) %11;

我针对 500 个 ISBN10 测试了新代码。

于 2020-06-22T04:13:49.260 回答