2014-02-26 40 views
2

我正在考慮使用正則表達式來限制城市名稱(全球範圍內)的標點符號。這將是一個相當包容的白名單?城市字段需要什麼標點符號?

我在想:

(space) 
. period 
- hyphen 
' apostrophe 

還想着也許逗號或斜線,但我沒有任何例子。有其他人嗎?

+1

我想這是所有的人。與包含特殊字符像城市名稱除外:Hōnaunau或SanJosè等。但是我所知道的大多數城市數據庫和網站都沒有使用任何這些特殊字符,基本上只是去掉那些字符並使用美國字母表等效,例如Honaunau或San Jose。 – MElliott

+1

在美國,所有城市名稱(根據USPS和我相信的USCB)都以ASCII碼存儲在官方數據庫中。在世界上,你必須考慮口音摺疊。 (也許可以考慮,而不是限制輸入,去掉不允許的標點符號,但是在某些語言中,重音字符會影響意義和拼寫。) – Matt

+0

@Matt:你說得對,我認爲剝離是更好的選擇。我主要關注標點符號而不是字母,因爲我打算允許擴展拉丁字符 – User

回答

1

This是在城市名稱中最具包容性的標點符號白名單。當某人在鍵盤上輸入撇號時,可能不會使用ASCII撇號代碼點。

如果你已經看出端倪提交的文本的編碼,你應該能夠看到,如果它落在標點塊下:

/\p{InGeneral_Punctuation}/ 

如果你限制自己拉丁語擴展,只需要使用那些:

/\p{InLatin_Extended-A}/ 

另外,問問自己:有人把一個有趣的角色放入我的城市名稱會有什麼後果?如果我排除了太多,那麼比那些不能輸入正確地址的人的後果更糟?

0

USPS標準地址格式化要求除去ZIP中主要和/或輔助街道地址行和連字符中使用的「必需」連字符和破折號之外的所有特殊字符。

所以如果一個地址是:

John O'Toole 
456 N 4-1/2 St 
San José, CA 99999-4545 

郵局喜歡信封標記:

John O Toole 
456 N 4 1/2 St 
San Jose CA 9999-4545