2012-06-19 43 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日 - 一個鏈接是谷歌代碼,某些更新當前鏈接:

相關問題