2012-03-22 81 views
0

我正在做一个LDAP查找,我需要根据寻呼机号码进行搜索。我们的寻呼机号码中可能会有连字符或空格或者parens。我试图找出我在寻呼机字段上需要的搜索过滤器,假设我的用户可能会或可能不知道parens或连字符在LDAP字段中的位置。子过滤器的LDAP过滤器?逃脱连字符和parens?

我想写一个过滤器,将匹配最后五位数字。

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

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

这些都将是在LDAP我们的寻呼机领域可能的值。

这是我到目前为止有:

(&(objectCategory =人)(对象类=用户)(SN = *)(给定名称= *)(寻呼机= * “+ Pager.Trim()+” ))”

这第一个例子能正常工作,但它不会让中间的例子,如果用户输入只是几个数字。

你们准备好可以写一个过滤器,将找到所有三种情况的五位数组合,或者我将需要进行多次搜索吗?

+0

这并不回答你的问题,但一般来说你的数据应该使用多值属性而不是'或'。这将使数据管理,搜索和审计更容易,更不用说简化应用程序代码。要求应用程序理解数据的格式是不可扩展的,这种做法导致脆弱和脆弱的应用程序和基础设施。 – 2012-03-23 12:47:26

+0

我不明白你的意思,特里,通过“你的数据应该使用多值属性”来代替或。你是否指我的例子中的数据值?这是我无法控制的。我只是试图搜索传呼机的值,而不是编辑或更新值。 – 2012-03-23 15:15:59

+0

如果您无法控制数据,则无关紧要。我在说“pager”的值最好存储在多值属性中,例如“pager:125”和“pager:(44)8-9622”。换句话说,目录条目对每个值都有一个“pager”属性,而不是使用“or”这个词。但正如我所说,如果你不能改变数据的格式,那没关系。 – 2012-03-23 15:23:15

回答

0

我不太肯定我遵循的价值观,但是,你可以或过滤器一起:除非这是筛选出一些特定的数据

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

SN和给定名称过滤器不应该是必要的。我会确保你的分页器属性被索引并在AD中有一个元组索引。

+0

我最终使用OR:(|(pager = *“+ Pager.Trim()+”)(pager = *“+ Pager.Trim()。Substring(0,1)+” - “+ Pager。 Trim()。Substring(Pager.Trim()。Length - 4,4)+“)) – 2012-03-23 17:42:53