簡體   English   中英

在POST之前,如何使用Javascript(或Rails)重新格式化表單輸入?

[英]How can I reformat form input before POST using Javascript (or Rails)?

我的表單中有一個標記為“名稱”的字段,其中將包含名字和姓氏。

我們現有的動態服務器(將表單過帳到該動態服務器)需要兩個單獨的字段(名字,姓氏)。

我可以在表單發布到服務器之前使用Javascript將用戶輸入分為兩個單獨的變量嗎? 我該怎么做?

您不應盡可能依賴客戶端解析。 如果您將此表格發送到您無法修改的應用程序,請使用上述Javascript方法,因為您無法控制它(但為什么不只有名字和姓氏字段)。 但是,如果您是后端應用程序的控制者,請在那里執行所有按摩和數據驗證。

僅應使用Javascript來增強UI體驗,而不應執行導入數據操作,如果將Javascript用於這些重要任務,則可能既是安全漏洞,也是失敗點。

另外,在處理名稱時,請記住您將獲得的所有不同種類的格式,例如:

John Smith Jr
Dr John Smith
John Smith Esq.
John Smith IV
John A Smith

因此要小心,按摩名字是一件很麻煩的事情,公眾至少會輸入他們想要的名字,並添加一個小標簽,並要求他們僅輸入“名字和姓氏”並祈求最好的名字。

對我來說,具有單個字段的原因是為了簡化表單,這將獲得更高的轉換率。

讓PHP將名稱拆分為名字和姓氏,然后讓PHP將表單重新提交給另一台服務器可能有點棘手...

您可以執行以下操作:

var yourForm = document.getElementById('yourFormId');
yourform.onsubmit = new function()
{
    var nameBox = document.getElementById('nameBox');
    var fname = document.createElement('INPUT');
    var lname = document.createElement('INPUT');
    fname.type = 'HIDDEN';
    lname.type = 'HIDDEN';
    fname.name = 'fname';
    lname.name = 'lname';

    var tokens = nameBox.value.split(' ');

    // Note there are a million ways to break this parser, demonstration only
    fname.value = tokens[0];
    lname.value = tokens[1];

    yourForm.appendChild(fname);
    yourForm.appendChild(lname);
}

如果需要在客戶端進行處理,請使用Javascript split方法解析名稱字段值。 然后將這兩個名稱附加到表單的url或創建幾個隱藏字段。

我將在服務器端進行處理,以確保所傳遞的數據與發布的數據准確無誤。 以編程方式分割名稱相對容易,但問題是如何定義分隔符。 大多數人都同意在有空格字符的地方將其拆分,但是如果他們輸入三個單詞的名稱(例如Don Juan DiMarco)怎么辦? 如果決定根據空格拆分名稱,則必須確定如何分配名字和姓氏。

$arrNames = preg_split('/\s+/', $_POST['name']);

上面的代碼將給您(在PHP中)一個由空格分隔的值數組。 在字符串Don Juan DiMarco上運行該字符串,將得到一個類似以下的數組:

Array([0] => "Don", [1] => "Juan", [2] => "DiMarco")

從那里,您必須確定哪些是名字,哪些是中間名,哪些是姓氏。 如果輸入4或5個名稱,難度會更大,這對於某些文化完全是現實的。 所有這些都是猜測,這就是為什么我建議在前端簡單地添加一個姓氏輸入字段的原因。 這將消除所有關於哪個名稱是名字和哪個姓氏的猜測工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM