我需要一个脚本来测试输入字段的内容,看它是否包含ISBN。我找到了一些这样的例子,但没有一个剥去破折号。我需要这样做,否则我的搜索结果不起作用。如果该字段没有ISBN,但我无法使用ISBN测试工作,那么脚本的其他部分可以正常工作。提前感谢您的帮助!
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
}
}
答案 0 :(得分:4)
根据维基百科文章中给出的算法,这里有一个简单的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);
if (check == 10) {
check = 'X';
}
return (check == str[str.length-1].toUpperCase());
}
}
答案 1 :(得分:1)
答案 2 :(得分:1)
还有一个用于检查ISBN10和ISBN13格式的js库:isbnjs以及isbn-verify
编辑2/2/17 - 之前的链接是Google代码,一些更新的当前链接: - npm for isbn-verify - npm for isbnjs - Github project
答案 3 :(得分:1)
对于此ISBN,Derek的代码失败==>“ 0756603390”
这是因为校验位将以11结尾。
不正确==>检查= 11-(总和%11); 正确==>检查=(11-(总%11))%11;
我针对500个ISBN10测试了新代码。