姓と名の両方を含む「名前」というラベルのフィールドがフォームにあります。
既存の動的サーバー (フォームの POST 先) は、2 つの別個のフィールド (名、姓) を想定しています。
フォームがサーバーに送信される前に、Javascript を使用してユーザー入力を 2 つの個別の変数に分割できますか? どうすればいいですか?
姓と名の両方を含む「名前」というラベルのフィールドがフォームにあります。
既存の動的サーバー (フォームの POST 先) は、2 つの別個のフィールド (名、姓) を想定しています。
フォームがサーバーに送信される前に、Javascript を使用してユーザー入力を 2 つの個別の変数に分割できますか? どうすればいいですか?
可能な限り、クライアント側の解析に依存しないでください。このフォームを変更できないアプリに送信する場合は、制御できないため、上記の 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 分割メソッドを使用して名前フィールドの値を解析します。次に、2 つの名前をフォームの URL に追加するか、いくつかの隠しフィールドを作成します。
サーバー側でこれを処理して、渡されたデータが投稿されたものから正確であることを確認します。プログラムで名前を分割するのは比較的簡単ですが、問題はセパレータをどのように定義するかです。ほとんどの場合、空白文字がある場合は分割することに同意しますが、Don Juan DiMarcoなどの 3 語の名前を入力するとどうなるでしょうか。空白に基づいて名前を分割する場合は、姓名の割り当て方法を決定する必要があります。
$arrNames = preg_split('/\s+/', $_POST['name']);
上記は、(PHPで)空白で分割された値の配列を提供します。これを文字列Don Juan DiMarcoで実行すると、次のような配列が得られます。
Array([0] => "Don", [1] => "Juan", [2] => "DiMarco")
そこから、どれが名で、どれがミドルネームで、どれが姓であるかを判断する必要があります。4 つまたは 5 つの名前を入力するとさらに難しくなりますが、これは特定の文化では完全に現実的です。これはすべて当て推量です。そのため、フロントエンドに姓の入力フィールドを追加することをお勧めします。これにより、どの名前がファースト ネームでどちらがラスト ネームであるかについての推測作業がすべてなくなります。