2

異なるタイトルをselect含む要素があります。例として:

<select name="titles">
  <option value="1">Mr.</option>
  <option value="2">Mrs.</option>
  <option value="3">Ms.</option>
  <option value="4">Dr.</option>
  [..]
</select>

次に、ユーザーが送信したタイトル(元々は自由形式のテキストボックスで記述されたもの)を含む文字列があります。私の仕事は、そのタイトルに対応するを選択optionすることです。select

しかし、私はユーザーが時々愚かであることに気づきます。

私が検索するユーザー指定の文字列は「dr」である可能性があります。または「Dr」またはそのようなもの。私はそれを最も関連性の高いものと一致させる必要があります(つまり、「Mr。」ではなく「Dr.」、どちらも「dr。」と近い)。

どうすればいいですか?私はこれまでにMySQLLIKEとPHPとの近似マッチングを行っただけlevenshtein()であり、どちらも私の理解にはJSにはあまり関係がありません。

jQuery1.7.1が利用可能です。IE6の互換性は私には関係ありません。

前もって感謝します!

4

4 に答える 4

2

私が間違っていない場合、合理的な(そして許容できる)バリエーションは、最初に大文字/大文字がなく、最後にポイント文字がないことだけです。

その場合はselect、上記を念頭に置いて、ユーザー文字列をの各項目と簡単に比較できます。

  • ユーザー入力の最初の文字を大文字に変換します。
  • .ユーザー文字列が。で終わっていない場合は、文字列の最後にaを追加し.ます。
  • 変更されたユーザー文字列をの各要素と比較し、select1つが一致するかどうかを確認します。
于 2012-04-05T06:29:45.013 に答える
2

ユーザーは決して愚かではありません;)

マッチングを行う前に、まずJavaScriptですべての文字を小文字に変換し、次にドット(。)を探して、それらを削除するか、マッチ文字列(選択)に追加します。

于 2012-04-05T06:32:58.743 に答える
1

お役に立てば幸いです。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type="text/javascript" charset="utf-8" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <!-- Date: 2012-04-05 -->
    <script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
        var title = "dr"
        $("#titles option").each(function(i, el) {
            var re = new RegExp(title, 'ig')
            if ($(el).html().match(re)) {
                $(el).attr("selected", "selected");
            }
        });
    })
    </script>
</head>
<body>
    <select name="titles" id="titles">
      <option value="1">Mr.</option>
      <option value="2">Mrs.</option>
      <option value="3">Ms.</option>
      <option value="4">Dr.</option>
    </select>
</body>
</html>

そして、あなたの問題に対する別の解決策-ユーザーに正確にこのフォームを提供して、ユーザーが間違ったデータを入力する機会がないようにします。

于 2012-04-05T06:43:17.220 に答える
0

自由形式の文字列をリストアイテムに一致させる余分なレイヤーを削除することを検討しますか?オートコンプリートフィールド/ドロップダウンなどがあるかもしれません。ユーザーに同じデータを2回入力して再選択させるのは過剰なようです。

あいまい検索アルゴリズムを検討することを提案しましたが、特定のタイトルに一致する値の配列を使用する方が簡単ではないでしょうか。それは、正規化された期間、大文字と小文字、および空白と比較するよりも可能性があります。

  • ユーザーが入力しDr、正規dr.Dr.されて照合されますDr.
  • ユーザーが入力しdoctorDoctor正規化されて照合されます
  • ユーザーが入力しdoc、正規Doc.docされて照合されます。

これは、ミスターなどのバリエーションを経ても、気が遠くなるような作業のように聞こえます。そもそも、正規化されたドロップダウンにすることを検討してください。これよりも処理が難しいのは、正規化されていないアドレスフィールドだけです:)

于 2012-04-05T06:54:32.063 に答える