0

我的表单中有一个标有“姓名”的字段,其中包含名字和姓氏。

我们现有的动态服务器(表单被发布到的)需要两个单独的字段(名字、姓氏)。

在将表单发布到服务器之前,我可以使用 Javascript 将用户输入拆分为两个单独的变量吗?我该怎么做?

4

5 回答 5

2

您不应尽可能依赖客户端解析。如果您将此表单发送到您无法修改的应用程序,请使用上面提到的 Javascript 方法,因为您无法控制它(但是为什么不只有名字和姓氏字段)。但是,如果您是后端应用程序的控制器,请在那里执行所有按摩和数据验证。

Javascript 应该只用于增强 UI 体验,而不是执行导入数据操作,如果将 Javascript 用于这些重要任务,它可能是一个安全漏洞和故障点。

此外,在操作名称时,请记住您将获得的所有不同类型的格式,例如:

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

所以要小心,按摩名字是一件很杂乱的事情,公众随便输入什么,最起码加个小标签,要求他们只输入“名字和姓氏”,并祈祷一切顺利。

于 2008-11-20T23:27:25.423 回答
0

你可以这样做:

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);
}
于 2008-11-20T23:17:22.307 回答
0

如果需要在客户端处理,使用Javascript split方法解析name字段值。然后将这两个名称附加到表单的 url 或创建几个隐藏字段。

于 2008-11-20T23:17:38.923 回答
0

我会在服务器端进行处理,以确保传递的数据与发布的数据准确无误。以编程方式拆分名称相对容易,但问题是如何定义分隔符。大多数人会同意在任何有空格字符的地方拆分它,但是如果他们输入三个单词的名字,例如Don Juan DiMarco怎么办?如果您决定根据空格拆分名称,则必须确定如何分配名字和姓氏。

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

以上将为您(在 PHP 中)提供一个由空格分隔的值数组。在字符串Don Juan DiMarco上运行它会给你一个像这样的数组:

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

从那里你必须确定哪些是名字,哪些是中间名,哪些是姓氏。如果你输入了 4 或 5 个名字,那就更难了,这对于某些文化来说是完全现实的。所有这些都是猜测,这就是为什么我建议在前端简单地添加一个姓氏输入字段。这将消除关于哪个名字是名字和哪个名字是姓氏的所有猜测工作。

于 2008-11-20T23:46:42.653 回答
0

对我来说,只有一个字段的原因是为了表单简单,这将获得更高的转化率。

让 PHP 将名称拆分为名字和姓氏,然后让 PHP 将表单重新提交到另一台服务器可能有点棘手......

于 2009-06-30T01:56:24.033 回答