2012-03-22 121 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