2012-06-19 45 views
0

我需要一个脚本来测试输入字段的内容以查看它是否包含ISBN。我找到了一些这样的例子,但是他们没有一个去掉破折号。我需要这种情况发生,或者我的搜索结果不起作用。如果该字段没有ISBN,但我无法使用其他部分的脚本,但无法使ISBN测试正常工作。预先感谢您的任何帮助!如何检查输入是否包含使用javascript的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

你应该真的* *服务器,而不是在客户端上进行验证和格式化数据。 – Matt

+0

去除破折号,做'textboxdata = textboxdata.replace(/ -/g,'');' – chesles

+0

马特,你是对的,但它也非常好,有一个输入改变颜色或类似的东西之前,他们提交形成。 –

回答

1

根据维基百科的文章中给出的算法,这里是用于验证10位和13位ISBN简单的JavaScript函数:

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()); 
    } 
} 
+0

这似乎不起作用(测试:9781906230166) – Bruno

+0

@布鲁诺它使用您的测试ISBN(它似乎是有效的)为我工作。我在Chrome开发人员工具中打开了控制台窗口,粘贴了上面给出的isValidIsbn函数的代码,然后运行isValidIsbn(“9781906230166”)并得到结果“true”。 –

+0

此代码仅检查校验位。这并不意味着ISBN是有效的。 (测试:'“978-1-906-230-166”'应该返回'false',而''978-1-906230-16-6''应该返回'true'。也许重命名这个函数为'checkDigit() '? – Bruno

0

,还可以用于检查ISBN10和网路书店格式化一个js库: isbnjs


编辑17年2月2日 - 一个链接是谷歌代码,某些更新当前链接:

相关问题