ruby 中的格式字符串(邮政编码)
我需要重新格式化英国邮政编码列表,并从以下内容开始删除空格并大写:
postcode.upcase.gsub(/\s/,'')
我现在需要更改邮政编码,以便新的邮政编码将采用与以下正则表达式匹配的格式:
^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$
我将不胜感激任何协助。
I need to re-format a list of UK postcodes and have started with the following to strip whitespace and capitalize:
postcode.upcase.gsub(/\s/,'')
I now need to change the postcode so the new postcode will be in a format that will match the following regexp:
^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$
I would be grateful of any assistance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果此标准文档可信(并且维基百科同意),格式化有效的邮政编码以进行输出很简单:最后三个字符是第二部分,前面的都是第一部分!
因此,假设您有一个有效的邮政编码,没有任何预先嵌入的空间,您只需要
如果您想首先验证输入邮政编码,那么您提供的正则表达式看起来是一个很好的起点。也许是这样的?
请注意,我删除了第一个字符的“0-9”部分,根据我引用的来源,这似乎是不必要的。我还更改了 alpha 集以匹配第一个引用的文档。它仍然不完美:例如,格式为“AAA ANN”的代码可以验证,我认为可能需要更复杂的 RE。
我认为这可能会覆盖它(分阶段构建以便更容易修复!)
If this standards doc is to be believed (and Wikipedia concurs), formatting a valid post code for output is straightforward: the last three characters are the second part, everything before is the first part!
So assuming you have a valid postcode, without any pre-embedded space, you just need
If you want to validate an input post code first, then the regex you gave looks like a good starting point. Perhaps something like this?
Note that I removed the '0-9' part of the first character, which appears unnecessary according to the sources I quoted. I also changed the alpha sets to match the first-cited document. It's still not perfect: a code of the format 'AAA ANN' validates, for example, and I think a more complex RE is probably required.
I think this might cover it (constructed in stages for easier fixing!)
英国邮政编码并不一致,但它们是有限的 - 使用查找表可能会更好。
UK Postcodes aren't consistent, but they are finite - you might be better with a look-up table.
重新格式化还是模式匹配?我怀疑后者,尽管首先升级它是一个好主意。
在我们继续之前,我会指出您正在删除空格,但您的正则表达式包含“ {1,2}”,即“一个或两个空格字符”。由于您已经删除了空格,因此您已经导致所有匹配失败。
给定邮政编码作为输入,我们可以使用 =~ 检查它是否与正则表达式匹配。
这里我们创建一些邮政编码示例(取自 维基百科页面),并根据正则表达式测试每一个:
Reformat or pattern match? I suspect the latter, although upcasing it first is a good idea.
Before we proceed though I would point out that you are stripping spaces but your regex contains " {1,2}" which is "one or two space characters". As you have already stripped whitespace you've already caused all to fail the match.
Given a post code as input we can check whether it matches the regex using =~
Here we create some example post codes (taken from the wikipedia page), and test each one against the regex: