正则表达式在Ruby 1.8.7中找不到匹配,但在1.9.2中找不到

时间:2014-05-05 07:30:06

标签: ruby-on-rails ruby regex ruby-1.8.7

我试图在Ruby中验证英国邮政编码。我在stackoverflow上偶然发现了这个正则表达式:

(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})

它在Ruby 1.9.2和2.0.0中很有用(见http://rubular.com/r/GKgLdIFvNJ),但我使用的是1.8.7。我该怎么办?

任何建议都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

你在哪里找到这个表达?我认为它不是为Ruby编写的。

Ruby不支持字符类减法。因此1.9.2接受[A-Z- [QVX]]但未按预期工作。这些字符不从char类中排除(See rubular,QVX仍然匹配)

1.8.7 完全接受此表达式。

您必须重写所有这些字符范围:

[A-Z-[QVX]]变为[A-PR-UWYZ]

See on Rubular