我是Ruby的新手,我正在为服务器编写代码。 代码已有半年历史。与此同时,Chrome更新版本为14版。
所以这是我的代码:
supported_browsers = /Chrome\/[3-9]|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/
正如您可以看到Chrome 3-9,但现在我尝试将其更改为:
supported_browsers = /Chrome\/[3-15]|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/
我收到语法错误。帮我弄清楚什么是错的。
答案 0 :(得分:3)
您的错误在此处:[3-15]
这是一个字符类,其范围为3到1,不允许使用。
我猜你想:[3-9]|1[0-5]
表示3到9或10到15
完整的正则表达式是:
supported_browsers = /Chrome\/([3-9]|1[0-5])|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/
答案 1 :(得分:3)
[3-9]
是numeric range。它表示3或9之间的单个数字。数字范围不能按预期方式工作:[3-15]
不是有效范围。
如果您只想匹配数字范围,可以使用[0-9]{1,2}
。它匹配0到99之间的所有内容。或者[0-9]+
以减少限制。
supported_browsers = /Chrome\/[0-9]+|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/
如果你真的想验证3-15范围内的包含,那么使用正则表达式并不是最好的选择。事实上,使用正则表达式,您的范围应该是[3-9]|1[0-5]
,并且您想要的限制越多,正则表达式就越复杂。
supported_browsers = /Chrome\/(?:[3-9]|1[0-5])|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4- 9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/
答案 2 :(得分:1)
[3-15]不检查范围。对于你必须使用的范围[3-9] | 1 [0-4]将匹配1-14 e.g。
supported_browsers = /Chrome\/([3-9]|1[0-4])|Firefox\/[3-9]|\sMSIE\s|Konqueror\/[4-9]|Midori|Minefield|Shiretoko|IceCat|Opera\/9.|\sAppleWebKit/