2011-11-14 66 views
3

你好,我試圖修剪空格,當用戶輸入空格時,他得到一個錯誤解釋說,他應該輸入有效的字符,但如果他使用:' test '相同的值輸入到數據庫中,我需要再修剪一次在JavaScript?從表單輸入修剪空格?

function validateForm() 
{ 
    if(trim(document.insert.aname.value) ==="") 
    { 
     alert("Animal should have a name"); 
     document.insert.aname.focus(); 
     return false; 
    } 
} 
function trim(value) { 
    return value.replace(/^\s+|\s+$/g,""); 
} 

請幫助你嗎? 輸入頁面是.JSP

+0

這不是Java。 –

+0

我知道,但這將由servlet處理我在哪裏把驗證內部的Java或JSP? – user1031152

+0

@ user1031152:java _is_是JSP。另一位是javascript – Eric

回答

7

你實際上並沒有修剪輸入。你想這樣的:

//store the input in a variable 
var nameInput = document.insert.aname 

function validateForm() { 
    //Get the trimmed name 
    var animalName = trim(nameInput.value) 

    if(animalName) { 
     //Update the form with the trimmed value, just before the form is sent 
     nameInput.value = animalName 
    } 
    else { 
     //Trimmed value is empty 
     alert("Animal should have a name"); 
     nameInput.focus(); 
     return false; 
    } 
} 

function trim(value) { 
    return value.replace(/^\s+|\s+$/g,""); 
} 
+1

請記住,這個問題被標記爲家庭作業。在這種情況下,我寧願給出提示而非答案。 – Smamatti

+0

非常感謝它現在的工作 – user1031152

+0

@ user1031152:請注意,這_doesn't_阻止我添加任意空格填充的字符串到您的數據庫。如果我禁用JavaScript,則此代碼將不會運行,並且會讓我提交未修剪/空字符串。在JSP中進行驗證。 – Eric

1

嘿,你可以使用這個功能jQuery.trim

var str = " a "; 
str = $.trim(str) 
+2

我認爲作業的重點不在於使用框架:) – Smamatti

+3

* Yay *,讓我們包含一個可以在1行內完成的31kb庫! – Matt

+1

以及Smamatti說我不能使用任何框架:(但感謝 – user1031152

4

首先,我將提供一些非請求的建議:)即使你的JavaScript代碼從修剪輸入用戶,您不能保證此代碼將始終運行。例如,用戶可能會在其瀏覽器上禁用JavaScript,或者只是使用庫(大量存在)以編程方式提交表單數據而不使用任何瀏覽器。

所以,你應該總是修剪服務器端的輸入(在你的情況下,在JSP中)。在生產系統中,您需要做的不僅僅是修剪,還需要檢查最大尺寸和數據類型(因此,如果您的JSP需要數字輸入,則需要檢查這些數據),

這意味着什麼是你基本上必須做兩次數據驗證。您在瀏覽器中執行的數據驗證有助於用戶,並且在輸入無效內容時應該顯示用戶友好的消息。重要的概念是瀏覽器驗證不提供安全性,因爲它不提供任何安全性。安全來自服務器端驗證。服務器端驗證對用戶友好的反饋並不重要;它很好,但它不是最重要的。

現在,你的問題。當你打電話像

trim(document.insert.aname.value) 

這不會改變窗體中的值。它只是給出了表單數據的修剪版本。所以當你提交表單時,'test'結尾處的空格和表單數據一起出現。

JavaScript有可能操縱表單中的內容,但這不是常用的操作,也不可取。因此,要總結:

  1. 您的代碼不刪除尾隨的空間供用戶提交的數據
  2. 你可以改變你的代碼要做到這一點,但它不會是因爲你必須執行一個好主意服務器上的裝飾,無論
  3. 因此,你需要修剪它在服務器上

希望這有助於。 菲爾

+0

的主意,首先非常感謝您的回覆,其次它是一項家庭作業,我是新手,所以我不認爲他們會麻煩您現在在客戶端進行驗證,但是您提供的信息非常好,我將爲我的未來家庭作業保留這些信息 – user1031152

+0

非常歡迎您,只要記住要保持健康的偏執狂,建設生產系統點。乾杯。 – PhilDin