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该标题相对应的内容中进行选择。

然而,在我看来,用户有时是愚蠢的。

我搜索的用户提供的字符串可能是“博士”。或“博士”或类似的东西。我需要将它与最相关的一个匹配(即“博士”而不是“先生”,他们都接近说“博士”)。

我该怎么办?我只做过与 MySQLLIKE和 PHP 的近似匹配levenshtein(),据我了解,这两者在 JS 中都不太相关。

jQuery 1.7.1 可用。IE6 兼容性与我无关。

先感谢您!

4

4 回答 4

2

如果我没记错的话,唯一合理(并且可以接受)的变化是开头的大写字母/没有大写字母和结尾的缺失点字符。

如果是这种情况,那么您可以简单地将用户字符串select与上面的每个项目进行比较:

  • 将用户输入的第一个字符转换为大写。
  • .如果用户字符串不以 结尾,则将a 添加到字符串的末尾.
  • 将修改后的用户字符串与其中的每个元素进行比较select,看看是否匹配。
于 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

您会考虑剥离将自由格式字符串与列表项匹配的额外层吗?也许有一个自动完成字段/下拉列表或类似的;让用户输入并重新选择相同的数据两次似乎太过分了。

我打算建议研究一个模糊搜索算法,但是拥有一个与特定标题匹配的值数组不是更简单吗?它可以与标准化句点、大写和空格进行比较,即

  • user-entered Drdr.并将Dr.被规范化并匹配Dr.
  • 用户输入doctor并将Doctor被规范化和匹配
  • 用户输入docDoc.并将doc被规范化和匹配等。

这听起来像是一个令人麻木的任务,尽管经历了各种各样的先生等。真正考虑首先将其变成一个标准化的下拉列表;唯一比这更难处理的是非规范化地址字段:)

于 2012-04-05T06:54:32.063 回答