我需要一种方法来从用户输入中分割英国邮政编码.这意味着postocode可以很好地格式化完整代码,就像"AB1 1BA"或它可能是你能想象的任何东西.我已经看到一些正则表达式检查邮政编码的格式,但它知道在哪里分割它,如果我给了类似"AB111AD"等的东西.这是为了返回邮政编码的第一部分,在上面的例子中将是"AB11".有什么想法吗?谢谢..
Jon*_*eet 17
我过去写过类似的东西.我想你可以在最后一位数之前拆分.(例如,删除所有空格,找到最后一位数字,然后在其前面插入一个空格):
static readonly char[] Digits = "0123456789".ToCharArray();
...
string noSpaces = original.Replace(" ", "");
int lastDigit = noSpaces.LastIndexOfAny(Digits);
if (lastDigit == -1)
{
throw new ArgumentException("No digits!");
}
string normalized = noSpaces.Insert(lastDigit, " ");
Run Code Online (Sandbox Code Playgroud)
在维基百科条目有很多细节,包括用于验证的正则表达式(正常化后:)
Bra*_*don 15
我不确定英国邮政编码如何运作,最后一部分是否考虑了最后3个字符,第一部分是以前的所有内容?
如果是这样,假设你已经处理了适当的验证,那么这样的事情应该有效:(编辑感谢Jon Skeets的提交)
string postCode = "AB111AD".Replace(" ", "");
string firstPart = postCode.Substring(0, postCode.Length - 3);
Run Code Online (Sandbox Code Playgroud)
这将返回邮政编码减去最后3个字符.
英国邮政编码格式说明:
参考:http://www.mrs.org.uk/pdf/postcodeformat.pdf
POSTCODE格式
邮政编码由以下元素组成:
PO1 3AX
以下列表显示了所有有效的邮政编码格式."A"表示字母字符,"N"表示数字字符.
FORMAT EXAMPLE:
AN NAA - M1 1AA
ANN NAA - M60 1NW
AAN NAA - CR2 6XH
AANN NAA - DN55 1PT
ANA NAA - W1A 1HQ
AANA NAA - EC1A 1BB
Run Code Online (Sandbox Code Playgroud)
请注意以下事项:
并且可以安全地假设space将是最后SW109RL的第四个字符,即,如果邮政编码缺少一个空格,你可以在最后的第四个位置盲目地放置一个空格,SW10 9RL