簡體   English   中英

根據輸入字符串動態創建正則表達式模式

[英]Dynamically create a regex pattern from input string

我在數據庫中存儲了多個稱為訂單編號模式的字符串。 該模式由主用戶/公司自行設置應用程序時指示。

因此,任何從他們的公司創建訂單的用戶都必須遵循這種模式。 模式集可以是諸如'000000''AAA00000''AA00aaa000'之類的數字(數字,大寫字母,小寫字母和特殊字符的混合)

我需要做的是驗證當用戶輸入訂單號時,它是否與公司設置的模式匹配,即,如果用戶輸入BX12-xyz-345則檢查其是否與模式'AA00-aaa-000'匹配。

我認為理想的是根據當前模式生成一個正則表達式模式,並將其存儲在客戶記錄中,因此使我可以更輕松地使用Regex.match函數進行匹配。 唯一的問題是,我必須為大約250多個客戶中的每一個手動創建正則表達式模式,因此想知道是否存在可以傳遞字符串的方式,它會為該字符串返回正則表達式模式。

理想情況下,如果我可以在SQL server (vial bulk update)做到這一點,那么我不介意在C#中創建一個一次性exe,該exe可以使用其regex模式去更新每條記錄,還可以更改應用程序,以便將來僅存儲數據庫中的正則表達式模式。

假設A / a / 0表示AZ,az和0-9,並且您不使用任何保留的圖案字符,則可以構建圖案遮罩:

declare @pattern varchar(max) = 'AA00-aaa-000'

set @pattern = replace(replace(replace(@pattern COLLATE Latin1_General_BIN, 'A', '[A-Z]'), 'a', '[a-z]'), '0', '[0-9]')

select @pattern

[AZ] [AZ] [0-9] [0-9] - [AZ] [AZ] [AZ] - [0-9] [0-9] [0-9]

if 'BX12-xyz-345' like @pattern print 'y'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM