如何验证一个字符串是否为正则表达式?

3
我的应用程序包括使用CodeDOM在运行时创建POCO类。我想找到一种方法,允许我的最终用户指定某些属性值的限制(例如,如果他添加一个电子邮件属性,那么他可能需要验证其内容是否为电子邮件地址。很明显,最终用户可能有更多自定义的限制)。
我的意图是提供一个“PropertyValidation”字段,最终用户可以提供一个正则表达式,用作所创建属性实例的内容验证器。
在允许它之前,有没有办法确保“PropertyValidation”字段中提供的字符串是实际的“Regex”?

2
使用 Try...Catch 块。https://dev59.com/7HVC5IYBdhLWcg3wqzHV - keyboardP
你的最终用户知道如何正确编写正则表达式吗?请记住,简单的“hi”是一个有效的正则表达式,但可能不会实现最终用户想要的功能。此外,有些内容(例如邮件地址甚至HTML输入)无法轻松地通过正则表达式进行验证。另外,糟糕编写和频繁使用的正则表达式会使应用程序变慢。 - hangy
1
你说的“valid”是什么意思?这个“.”是一个有效的正则表达式。 - Mike Perrenoud
1
@TheSolution 是的,但这不是:? - Lasse V. Karlsen
@hangy:我的最终用户是系统管理员,所以他们知道如何编写正则表达式。 - Moslem Ben Dhaou
@TheSolution:只要他们写了,我就不在乎。 - Moslem Ben Dhaou
2个回答

7
尝试创建一个正则表达式对象并捕获任何结果错误:
try { Regex reg = new Regex(userDefinedValidation); } 
catch (ArgumentException) { /* not a regex */ }

3
为避免吞噬任何意外错误,您可能希望捕获 ArgumentException - James
其实我刚想到这个,本来要在这里添加,结果你已经做了 :) 谢谢! - Moslem Ben Dhaou

-3
如果“Try-Catch方式”太通用了,那么你应该比如编写一个解析正确的正则表达式的正则表达式;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接