如何允许最终用户使用regex创建验证规则

How allow end user to create validation rules using regex?

本文关键字:regex 创建 验证 规则 何允许 用户      更新时间:2023-10-16

在我的应用程序中,我允许用户使用charter '*''?'创建一些验证规则,其中'*'表示多个charter,'?'表示一个字符。例如,用户可以编写"*Ma?s*",因此它应该匹配类似于"ajdg adbf MaKs sjklfd"的内容。对不起,这个例子,但我什么都没想,可能用户输入了更复杂的规则。

我通过将规则和匹配字符串发送到SQL Server数据库来解决这个问题,并用'%'替换每个'*',用'_'替换每个'?',使用类似的条件,效果很好,但用户可以输入很多验证规则和很多匹配,所以有很多数据库操作,所以我想我晚上在客户端使用新的c++11正则表达式来做这件事,我搜索了很多,读了很多文章,但都没有答案。

那么这可以在regex中完成吗?如何?

如果要创建正则表达式,只需要将规范转换为正则表达式。为此,只需替换:

  • *.*(或.+,取决于您是否需要至少一个字符(
  • ?.

注意:

.匹配任何字符。如果您只查找字母,可以使用[a-zA-Z]替换.。对于数字,d。对于字母和数字、[a-zA-Z0-9]等,

您可以通过用.*替换*,用.替换?来执行此操作。然而,请注意,我遇到的大多数C++<regex>实现并不是真正的功能性实现,因此目前您需要依赖Boost.regex

顺便说一句,请注意,您需要首先对用户输入进行消毒。否则,恶意用户可能会对您的系统造成非常糟糕的影响。