php - 基于手机键盘的正则名称查询

标签 php jquery ajax search

就目前而言,我没有示例代码,我想就这是否可行寻求建议,以及如何......

我被要求创建一个 PHP 脚本来搜索我们的 Windows LDAP 地址簿。 为了让事情变得尴尬,我被要求这样做,以便前端看起来像电话键盘,用户使用数字键盘输入姓名。

在我看来,数字将与字母相关:

2 = ABC
3 = DEF
4 = GHI
5 = JKL
6 = MNO
7 = PQRS
8 = TUV
9 = WXYZ

我可以看到两种不同的方法。

  1. 当用户输入第一个数字时开始构建一个匹配数组,然后在他们输入第二个和第三个匹配项时减少这个数组。

  2. 建立输入的数字列表,然后搜索显式匹配项。

我能看到的另一个问题是我需要知道用户输入的数字以及在字符串中的时间。

例如:用户输入 6 4 5 这需要匹配为:

M, N or O, as the first character.
G, H or I as the second character.
J, K or L as the thrid character.

有没有人有什么建议,指点建议?

谢谢

最佳答案

我同意 Dave 的观点,这确实是一个愚蠢的想法,但在您手动进行整个过滤之前,LDAP 过滤器可能是一个解决方案。您必须为可能的组合创建一个巨大的过滤器:

function getCombinations(array $digits = array())
{
    $digitToLetters = array(
        2 => array('A', 'B', 'C'),
        3 => array('D', 'E', 'F'),
        4 => array('G', 'H', 'I'),
        5 => array('J', 'K', 'L'),
        6 => array('M', 'N', 'O'),
        7 => array('P', 'Q', 'R', 'S'),
        8 => array('T', 'U', 'U'),
        9 => array('W', 'B', 'Y', 'Z')
    );

    $values = array('');
    foreach ($digits as $digit) {
        $newValues = array();
        foreach ($values as $value) {
            if (array_key_exists($digits[0], $digitToLetters)) {
                foreach ($digitToLetters[$digit] as $letters) {
                    $newValues[] = $value . $letters;
                }
            }
        }
        $values = $newValues;
    }

    return $values;
}

function getFilterForDigits(array $digits = array()) {
    $combinations = getCombinations($digits);
    $filter = '(|(sn=' . implode('*)(sn=', $combinations) . '*))';
}

假设您仅按姓氏 (sn) 进行过滤,但您可以轻松更改它,因此它可能适合 givenName - 请记住,以防万一过滤器,过滤器大小加倍,这可能会导致 LDAP 请求变慢。

要过滤输入 645 的所有可能结果,可以调用:

$ds = ldap_connect("...");
$result = ldap_search($ds, "...", getFilterForDigits(array(6, 4, 5)));

我仍然强烈建议不要这样做,但是如果您手头拮据,请确保实现某种缓存。 :)

关于php - 基于手机键盘的正则名称查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15219776/

相关文章:

php - 正则表达式模式内的条件

php - 如何使用 magento 上的自定义集合更改特定类别的页面大小

php - 带有Laravel的Docker因php扩展而失败

javascript - 通过单击链接打开/隐藏已经打开的 div

javascript - 持久Qtip

jquery - 有没有一些聪明的方法可以在 jQuery 中自定义 ajax 消息文本?

php - 如何循环执行 INSERT INTO 语句

javascript - JS 按钮,递增/递减无法在输入字段上正确工作

ajax - 如何基于异步源设置初始值,例如使用 redux-form 的 ajax 调用

ajax - ASP.NET MVC Ajax 使用 jquery 表单插件上传文件?