2013-02-26 25 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