2013-02-26 26 views
1

在我的應用程序正在使用戶能夠創建使用租船'*''?'其中'*'意味着許多租船'?'一些驗證規則意味着一個字符,例如用戶可以編寫"*Ma?s*"所以應該匹配遺憾的例子,但我是這樣的"ajdg adbf MaKs sjklfd"沒有任何想法,也許用戶輸入更復雜的規則。如何讓最終用戶使用正則表達式創建驗證規則?

我通過發送規則和匹配字符串到SQL Server數據庫的問題解決了,代之以各'*''%'每個'?''_'和類似條件下使用和偉大工程,但有很多驗證規則,用戶可以輸入和很多匹配,所以有很多數據庫操作,所以我想我晚上使用新的C + + 11正則表達式來做到這一點在客戶端,我搜索了很多,閱讀了很多文章,但沒有答案。

所以這可以在正則表達式中完成嗎?如何 ?

回答

2

如果你想創建一個正則表達式,你只需要將你的規範轉換爲正則表達式。對於這一點,只需更換:

  • *通過.*(或.+,這取決於如果你想至少有一個字符或不)
  • ?通過.

注:

.匹配任何字符。如果您僅查找字母,則可以使用[a-zA-Z]替代.。對於數字,\d。對於字母和數字,[a-zA-Z0-9]

+0

謝謝它的工作,我沒有嘗試,直到今天 但現在我不能讓用戶輸入正則表達式使用正確的特殊字符? – AlaaL 2013-03-05 11:42:58

+0

你有兩種選擇:1)不允許它,或者2)逃離字符。我不知道如何在C++中完成它,但是在C#中,您執行'Regex.Escape(「*」)',它將返回'\ *'。如果你找到一種在C++中轉義角色的方法,那麼你會好起來的。 – 2013-03-06 00:13:05

1

您可以通過..*?更換*這樣做。但請注意,我遇到的大多數C++ <regex>實現都不是真正的功能,所以暫時您需要依賴Boost.regex

另外,請注意,您需要先清理用戶輸入。否則,惡意用戶可能會對您的系統做非常糟糕的事情。

+0

謝謝你,你的解決方案工作,但我不能接受兩個答案,所以我接受了最古老的 – AlaaL 2013-03-05 11:44:44