选择中最接近的匹配项
Closest match in a select
我有一个包含不同标题的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>
然后我有一个字符串,其中包含一个用户提交的标题(最初写在一个自由形式的文本框中)。我的任务是在select
中选择与该标题对应的option
。
然而,我突然想到,用户有时是愚蠢的。
我搜索的用户提供的字符串可能是"dr"或"dr"之类的。我需要将它与最相关的一个匹配(即"Dr."而不是"Mr.",两者都接近于说"Dr
我该怎么做?我只做过MySQL的LIKE
和PHP的levenshtein()
的近似匹配,据我所知,它们在JS中都不太相关。
jQuery 1.7.1可用。IE6兼容性与我无关。
提前谢谢!
如果我没有错的话,唯一合理(可接受)的变体是开头有大写字母/没有大写字母,结尾有一个缺失的点字符。
如果是这种情况,那么您可以简单地将用户字符串与select
中的每个项目进行比较,并记住以上内容:
- 将用户输入的第一个字符转换为大写
- 如果用户字符串未以
.
结尾,则在字符串末尾添加.
- 将修改后的用户字符串与
select
中的每个元素进行比较,看看其中一个是否匹配
用户从不愚蠢;)
在进行匹配之前,我会先在javascript中将所有字母转换为小写,然后查找点(.),然后可以将它们删除或添加到匹配字符串中(这是您的选择)。
希望能有所帮助。
<!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>
还有另一个解决问题的方法——给你的用户提供这个表单,这样他们就没有机会输入任何错误的数据。
您会考虑剥离将自由形式字符串与列表项匹配的额外层吗?可能有一个自动完成字段/下拉列表或类似功能;让用户输入并重新选择相同的数据两次似乎太过分了。
我本来打算建议研究一种模糊搜索算法,但拥有一个与特定标题匹配的值数组不是更简单吗?它可以与标准化周期、大写和空白区(即)进行比较
- 用户输入的
Dr
、dr.
和Dr.
将被标准化并与Dr.
匹配 - 用户输入的
doctor
和Doctor
将被规范化并匹配 - 用户输入的
doc
、Doc.
和doc
将被归一化和匹配等
这听起来像是一项令人麻木的任务,尽管要经历各种各样的迷雾等。真的首先要考虑将其变成一个标准化的下拉列表;唯一比这更难处理的是一个非规范化的地址字段:)
相关文章:
- 获取最接近的数组数
- 从同级字符串中指定最接近的元素类
- 取消选中时选择最接近的“从中选择”复选框
- jQuery检索最接近唯一选择器的内容
- 如何获取与选择器匹配的最接近的父级或同级
- 选择中最接近的匹配项
- 无法使用JavaScript选择最接近的h2元素
- 只选择一个最接近的元素
- 使用 jQuery 选择最接近匹配
- Jquery-查找起始元素与该选择器最接近的父元素匹配的所有元素
- 在最接近('tr')的单元格中选择不同类型的输入
- Jquery选择最接近的类
- jQuery选择最接近元素的子元素
- jQuery最接近类选择器
- 选择经度和纬度最接近的记录
- Jquery文本中最接近的选择器
- 选择最接近的控件元素,不管类型(Input, Select等)进行验证
- 另一个最接近的子线程:查找与选择器匹配的元素的最近祖先
- 当涉及到重载时,Javascript会选择物理上最接近的方法吗
- 仅当表超过 2 行时才返回最接近的
的选择器