c#英国邮政编码分裂

Tik*_*keb 12 c# string

我需要一种方法来从用户输入中分割英国邮政编码.这意味着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个字符.

  • 如果人们把空间放在错误的位置,那将会失败:"AB1 11AD".想打赌那不会发生?:) (3认同)
  • 你是对的,那会失败,但在进行Substring调用之前替换任何空格都会很容易. (3认同)
  • 如果它可能发生......它会 (3认同)

Rao*_*Rao 8

英国邮政编码格式说明:

参考:http://www.mrs.org.uk/pdf/postcodeformat.pdf

POSTCODE格式

邮政编码由以下元素组成: PO1 3AX

  • PO区域.英国有124个邮编区域
  • 1区.一个地区大约有20个邮政编码区
  • 3该部门.一个扇区中大约有3000个地址.
  • AX单位.每个单元大约有15个地址.

以下列表显示了所有有效的邮政编码格式."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)

请注意以下事项:

  • 字母Q,V和X未在第一个位置使用
  • 字母I,J和Z不用于第二位置.
  • 在第三个位置出现的唯一字母是A,B,C,D,E,F,G,H,J,K,S,T,U和W.
  • 邮政编码的后半部分始终是一致的数字,alpha,alpha格式,字母C,I,K,M,O和V从不使用.

并且可以安全地假设space将是最后SW109RL的第四个字符,即,如果邮政编码缺少一个空格,你可以在最后的第四个位置盲​​目地放置一个空格,SW10 9RL