[英]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.