posta kodu için normal ifade


118

Olası Yineleme:
Nihai posta kodu ve zip normal ifadesi nedir?

Posta kodu için üç koşulumu da karşılayabilecek Regex'e ihtiyacım var. Örneğin-

  1. 12345
  2. 12345-6789
  3. 12345 1234

Herhangi bir işaret ve öneri çok takdir edilecektir. Teşekkürler !


4
Yinelenen kapanış kabataslak görünüyor - dupe, şimdiye kadar herhangi bir ulustan herhangi bir posta koduyla eşleşecek bir normal ifade istiyor, oysa bu soru posta kodlarıyla eşleşecek bir normal ifade istiyor, ki bu yalnızca ABD için olan bir şey, bu da bu soruyu çok yapıyor dupe oranla sınırlı dar - ama orada olan dupe bulunabilir bir cevap aslında. ABD dahil 100'den fazla ülke için Unicode CLDR'lerin (eski, artık kullanımdan kaldırıldı, ancak çoğu durumda muhtemelen yeterli) posta kodu normal ifadelerini listeleyen stackoverflow.com/a/7185241/1709587 sayfasına bakın . ABD normal ifadesi \d{5}([ \-]\d{4})?.
Mark Amery

Yanıtlar:


311
^\d{5}(?:[-\s]\d{4})?$
  • ^ = Dizenin başlangıcı.
  • \d{5} = 5 basamakla eşleş (1, 2, 3 koşulu için)
  • (?:…) = Gruplama
  • [-\s] = Bir boşlukla (koşul 3 için) veya bir kısa çizgiyle (koşul 2 için) eşleş
  • \d{4} = 4 basamakla eşleştir (koşul 2, 3 için)
  • …? = Önündeki desen isteğe bağlıdır (koşul 1 için)
  • $ = Dizenin sonu.

7
\ssekmeler ve yeni satırlar dahil herhangi bir boşlukla eşleşir.
eyelidlessness

1
Merhaba, boşluksuz 123451234 durumu hakkında
Ajay Suwalka

4
@ProVega: Bağlantı verdiğiniz (artık silinmiş) yanıttaki yorumları okumak yanlış görünüyor. Örneğin, 00544geçerli bir posta kodudur; 544değil.
Keith Thompson

2
@AjaySuwalka: 123451234'e yer olmadan uyum sağlamak için tek yapmanız gereken yer a? [- \ s] 'den sonra, şu şekilde olacaktır: ^ \ d {5} (?: [- \ s]? \ d {4})? $
Grungondola

6
Partiye biraz geç ve belki de balodaki en güzel zil değil, ancak kısa çizginin her iki tarafına da ek isteğe bağlı boşluklar ekledim - çoğunlukla estetik için. /(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel

4

Yalnızca listelenen üç koşul için bu ifadeler de işe yarayabilir:

^\d{5}[-\s]?(?:\d{4})?$
^\[0-9]{5}[-\s]?(?:[0-9]{4})?$
^\[0-9]{5}[-\s]?(?:\d{4})?$
^\d{5}[-\s]?(?:[0-9]{4})?$

Ek açıklama için lütfen bu demoya bakın.

5 ile 4 basamak arasında beklenmedik ek boşluklar veya sürekli 9 basamaklı posta kodumuz olsaydı, örneğin:

123451234
12345 1234
12345  1234

bu ifade örneğin daha az kısıtlamaya sahip ikincil bir seçenek olabilir:

^\d{5}([-]|\s*)?(\d{4})?$

Ek açıklama için lütfen bu demoya bakın.

RegEx Devresi

jex.im, normal ifadeleri görselleştirir:

görüntü açıklamasını buraya girin

Ölçek

const regex = /^\d{5}[-\s]?(?:\d{4})?$/gm;
const str = `12345
12345-6789
12345 1234
123451234
12345 1234
12345  1234
1234512341
123451`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}


0

Bunun, RegEx'i sık kullanan çoğu insan için açık olabileceğini biliyorum, ancak herhangi bir okuyucunun RegEx'e yeni girmesi durumunda, projelerimden biri için yararlı olan yaptığım bir gözlemi belirtmem gerektiğini düşündüm.

@Kennytm'den bir önceki yanıtta:

^\d{5}(?:[-\s]\d{4})?$

...? = Önündeki desen isteğe bağlıdır (koşul 1 için)

Hem standart 5 basamaklı hem de +4 posta kodlarına izin vermek istiyorsanız, bu harika bir örnek.

Yapmam gerektiği gibi yalnızca ABD 'Zip + 4' biçimindeki posta kodlarını eşleştirmek için (yalnızca koşullar 2 ve 3), sonuncuyu kaldırmanız yeterlidir, ?böylece her zaman son 5 karakter grubuyla eşleşir.

RegEx ile uğraşmak için önerdiğim kullanışlı bir araç aşağıda bağlantılıdır:

https://regexr.com/

İhtiyaç duyduğuma benzer bir şey yapan ancak biraz daha iyi uyarlanabilen RegEx'i bulduğumda bu aracı sık sık kullanıyorum. Ayrıca, değişikliklerinizin girdiğiniz örnek metin için eşleşmeleri nasıl etkilediğinin farkında olmanızı sağlayan şık bir RegEx referans menüsü ve bilgilendirici bir arayüze sahiptir.

Yanlış bir şey alırsam veya önemli bir bilgiyi kaçırırsam, lütfen beni düzeltin.


veya bu normal ifade öğreticisine başvurabilirsiniz - youtube.com/watch?v=8uCHRyK_VMo
Krishnraj Rana
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.