【问题标题】:LDAP Filter for substring? escaping hyphens and parens?子字符串的 LDAP 过滤器?转义连字符和括号?
【发布时间】:2012-03-23 20:47:56
【问题描述】:

我正在从 LDAP 进行查找,我需要根据寻呼机号码进行搜索。我们的寻呼机号码中可能包含连字符、空格或括号。我试图找出我的寻呼机字段中需要的搜索过滤器,假设我的用户可能知道也可能不知道括号或连字符在 LDAP 字段中的位置。

我正在尝试编写一个匹配最后五个数字的过滤器。

示例(单引号不存储在 LDAP 中,我在这里使用它们作为分隔符):

'127 13098'
'125 or (44)8-9622'
'126 (12349)'

这些都是 LDAP 中 Pager 字段中可能的值。

这是我目前所拥有的:

(&(objectCategory=person)(objectclass=user)(sn=*)(givenname=*)(pager=*" + Pager.Trim() + "))"

这对于第一个例子来说很好,但如果用户只输入数字,它就不会得到中间例子。

是否有可能编写一个过滤器来找到所有三种情况的五位数组合,还是我需要进行多次搜索?

【问题讨论】:

  • 这不能回答你的问题,但一般来说你的数据应该使用多值属性而不是or。这将使数据管理、搜索和审计更加容易,更不用说简化应用程序代码了。要求应用程序理解数据的格式是不可扩展的,这样的做法会导致应用程序和基础设施脆弱而脆弱。
  • 我不明白你的意思,特里,“你的数据应该使用多值属性”而不是 or。您指的是我的示例中的数据值吗?这是我无法控制的。我只是想搜索寻呼机值,而不是编辑或更新值。
  • 如果您无法控制数据,也没关系。我是说pager 的值最好存储在多值属性中,例如pager: 125pager: (44)8-9622。换句话说,目录条目的每个值都有一个pager 属性,而不是使用单词or。但正如我所说,如果你不能改变数据的格式,那也没关系。

标签: ldap


【解决方案1】:

我不太确定我是否遵循这些值,但是,您可以一起使用 OR 过滤器:

(&(objectCategory=person)(objectClass=user)(|(pager=*127 13098*)(pager=125)(pager=126)...))

sn 和 givenName 过滤器不应该是必需的,除非它过滤掉一些特定的数据。我会确保你的 pager 属性被索引并且在 AD 中有一个元组索引。

【讨论】:

  • 我最终使用了 OR: (|(pager=*" + Pager.Trim() + ")(pager=*" + Pager.Trim().Substring(0, 1) + "-" + Pager.Trim().Substring(Pager.Trim().Length - 4, 4) + "))
猜你喜欢
  • 2016-03-15
  • 2015-09-27
  • 1970-01-01
  • 2013-01-13
  • 2014-09-29
  • 2016-01-13
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多