【发布时间】:2013-12-08 04:59:45
【问题描述】:
我正在为每个用户创建用户安全策略。每个用户安全策略中都会有一个正则表达式语句。
每个网页都有自己唯一的ID,数字格式从0到100000。当用户访问一个网页时,系统会根据用户正则表达式的安全策略检查该网页的ID。
例如,用户可以访问除 ID 编号为 2、54、109 到 2001 和 10521 的网页之外的所有网页(ID 范围为 1 - 100000)。如何编写高效的正则表达式来解决这个要求?
【问题讨论】:
-
最好用实际的编程语言来检查。只需将用户 ID 获取为任意数字并检查它是否在通常的
if范围内。它会更干净更短。 -
为了说明为什么正则表达式不是此任务的正确工具,您建议的示例的正则表达式将是
^(?!(2|54|109|1[1-9]\d|[2-9]\d{2}|1\d{3}|200[01]|10521)$)(\d{1,5}|100000)$。这是在诸如原子分组之类的性能优化(效率标准)之前,这将使表达式进一步复杂化。而且由于它具有安全功能,规范化漏洞(例如,前导零)将是一个潜在的问题。