我的表单中有一个标有“姓名”的字段,其中包含名字和姓氏。
我们现有的动态服务器(表单被发布到的)需要两个单独的字段(名字、姓氏)。
在将表单发布到服务器之前,我可以使用 Javascript 将用户输入拆分为两个单独的变量吗?我该怎么做?
我的表单中有一个标有“姓名”的字段,其中包含名字和姓氏。
我们现有的动态服务器(表单被发布到的)需要两个单独的字段(名字、姓氏)。
在将表单发布到服务器之前,我可以使用 Javascript 将用户输入拆分为两个单独的变量吗?我该怎么做?
您不应尽可能依赖客户端解析。如果您将此表单发送到您无法修改的应用程序,请使用上面提到的 Javascript 方法,因为您无法控制它(但是为什么不只有名字和姓氏字段)。但是,如果您是后端应用程序的控制器,请在那里执行所有按摩和数据验证。
Javascript 应该只用于增强 UI 体验,而不是执行导入数据操作,如果将 Javascript 用于这些重要任务,它可能是一个安全漏洞和故障点。
此外,在操作名称时,请记住您将获得的所有不同类型的格式,例如:
John Smith Jr
Dr John Smith
John Smith Esq.
John Smith IV
John A Smith
所以要小心,按摩名字是一件很杂乱的事情,公众随便输入什么,最起码加个小标签,要求他们只输入“名字和姓氏”,并祈祷一切顺利。
你可以这样做:
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方法解析name字段值。然后将这两个名称附加到表单的 url 或创建几个隐藏字段。
我会在服务器端进行处理,以确保传递的数据与发布的数据准确无误。以编程方式拆分名称相对容易,但问题是如何定义分隔符。大多数人会同意在任何有空格字符的地方拆分它,但是如果他们输入三个单词的名字,例如Don Juan DiMarco怎么办?如果您决定根据空格拆分名称,则必须确定如何分配名字和姓氏。
$arrNames = preg_split('/\s+/', $_POST['name']);
以上将为您(在 PHP 中)提供一个由空格分隔的值数组。在字符串Don Juan DiMarco上运行它会给你一个像这样的数组:
Array([0] => "Don", [1] => "Juan", [2] => "DiMarco")
从那里你必须确定哪些是名字,哪些是中间名,哪些是姓氏。如果你输入了 4 或 5 个名字,那就更难了,这对于某些文化来说是完全现实的。所有这些都是猜测,这就是为什么我建议在前端简单地添加一个姓氏输入字段。这将消除关于哪个名字是名字和哪个名字是姓氏的所有猜测工作。
对我来说,只有一个字段的原因是为了表单简单,这将获得更高的转化率。
让 PHP 将名称拆分为名字和姓氏,然后让 PHP 将表单重新提交到另一台服务器可能有点棘手......