我希望让(admin)用户输入一些模式匹配字符串,以便让我的网站的不同用户访问不同的数据库行,具体取决于行的特定字段中的文本是否与模式匹配字符串匹配对那个用户。
我决定使用Regex,因为直接集成到MySQL语句中是微不足道的。
我真的不知道从哪里开始验证字符串是一个有效的正则表达式,带有正则表达式。
我做了一些搜索类似的问题,看不到一个。谷歌制作了comical answer,遗憾的是没那么有用。
人们是在野外做这件事还是避免它?
是否可以使用简单的正则表达式完成,或者是否需要将所有有效正则表达式的集合限制为可用的子集?
答案 0 :(得分:2)
验证正则表达式是一项非常复杂的任务。正则表达式无法做到。
一种简单的方法是捕获尝试运行SQL语句时发生的任何错误,然后向用户报告相应的错误。
我假设'admin'在这里是受信任的用户。赋予不受信任的用户输入正则表达式的能力是非常危险的,因为使用构造为需要很长时间才能执行的正则表达式来攻击系统很容易。那是在你开始担心Bobby Tables问题之前。
答案 1 :(得分:2)
在javascript中:
input = "hello**";
try{
RegExp(input);
// sumbit the regex
}catch(err){
// regex is not valid
}
答案 2 :(得分:-1)
您无法验证字符串是否包含带有正则表达式的有效正则表达式。但你可能会妥协。
如果您只需要知道在字符串中只使用了正则表达式中有效的字符,则可以使用正则表达式:
^[\d\w \-\}\{\)\(\+\*\?\|\.\$\^\[\]\\]*$
取决于应用程序,这可能就足够了。