Regex, beyaz boşluk veya iki nokta üst üste hariç alfasayısal olmayan her karakter


131

Bunu her yerde nasıl yapabilirim?

Temel olarak, "ve" işareti, noktalı virgül, dolar işareti vb. Gibi her türden çeşitli karakterleri eşleştirmeye çalışıyorum.


13
/[^a-zA-Z0-9\s\:]*/
Kelly

Yanıtlar:


246
[^a-zA-Z\d\s:]
  • \ d - sayısal sınıf
  • \ s - boşluk
  • a-zA-Z - tüm harflerle eşleşir
  • ^ - hepsini geçersiz kılar - böylece elde edersiniz - sayısal olmayan karakterler, boşluk olmayanlar ve iki nokta üst üste olmayanlar

Ben de öyle bakıyordum :)) - Mükemmel cevabınızı tanıtmam gerekiyor
Tudor Constantin

7
Bulduğum tek şey, bunun é veya ã gibi özel karakterleri kaldırması. [^ \ W \ d \ s:] 'yi tercih ederim.
Eric Belair

5
Bu, Latin olmayan karakterleri veya "özel" Latin karakterlerini yakalayamayacağı için olumsuz oy verildi.
damian

\dve \sPerl tipik gibi eski araçları tarafından desteklenmeyen uzantılarıdır grep, sed, tr, lexvb
tripleee

38

Bunu yapmalı:

[^a-zA-Z\d\s:]

1
Geri kalanlar ya boşluk olup olmadığını kontrol eder, ancak boşlukları kontrol etmez ya da aslında olumsuzlamak için olumsuzlama yanlış yerde olur.
Zachary Scott

\ w ayrıca alfanümerik olmayan bir karakter olan alt çizgileri de yakalar
Tudor Constantin

Aha! Değiştireceğim - bunu bilmiyordum. Farklı motorlar için farklı çalışmasını bekliyorum, ancak OP'ye güvenli yanıtı da verebilir.
Luke Sneeringer

2
Bu, Latin olmayan karakterleri veya "özel" Latin karakterlerini yakalayamayacağı için olumsuz oy verildi.
damian

16

Vurgulu latin karakterleri (ör. À Ñ) normal harfler olarak ele almak istiyorsanız (yani, onları eşleştirmekten de kaçının), ayrıca normal ifadenize uygun Unicode aralığını ( \ u00C0- \ u00FF ) eklemeniz gerekir. şöyle görünürdü:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ sonrasını reddeder
  • a-zA-Z büyük ve küçük harflerle eşleşir
  • \d rakamlarla eşleşir
  • \s boşlukla eşleşir (yalnızca boşlukları eşleştirmek istiyorsanız, bunu bir boşlukla değiştirin)
  • : iki nokta üst üste ile eşleşir
  • \u00C0-\u00FF aksanlı latin karakterler için Unicode aralığıyla eşleşir.

nb. Unicode aralığı eşleştirmesi tüm normal ifade motorlarında çalışmayabilir, ancak yukarıdakiler kesinlikle Javascript'te çalışır ( Codepen'deki bu kalemde görüldüğü gibi ).

NB2. Alt çizgileri eşleştirme konusunda sıkıntı yaşamıyorsanız , harflerle, rakamlarla ve alt çizgilerle eşleşen a-zA-Z\dile değiştirebilirsiniz \w.


Bu aralık, alfasayısal olmayan (U + 00D7 ve U + 00F7) bazı karakterler içerir ve Lehçe, Çekçe, Vietnamca vb. Gibi Batı dışı dillerden çok sayıda geçerli aksanlı karakteri hariç tutar
üçlü

1
Normal İfadenin her bir bölümünün açıklaması için oy verildi.
morajabi

14

Bunu dene:

[^a-zA-Z0-9 :]

JavaScript örneği:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

Çevrimiçi bir örneğe bakın:

http://jsfiddle.net/vhMy8/


3
Bu, Latin olmayan karakterleri veya "özel" Latin karakterlerini yakalayamayacağı için olumsuz oy verildi.
damian

14
Bir yanıta oy vermek kolaydır ve yine de kurula yapıcı bilgi sağlamak daha zordur, örneğin Latin olmayan karakterler veya "özel" Latin karakterleri nasıl yakalanır? Buradaki sayımdan itibaren, aynı nedenle 3 yanıtı reddettiniz ve bence oldukça küçük bir değişiklik için. Örneğin, tam olarak bu cevaplarda tartışılanlar için bir normal ifade bulmaya geldim. Başvurumda kullanılmayacak karakter setleri umurumda değil. Azalan getiri yasası.

Aaron bir ABD vatandaşı için "küçük bir değişiklik" olabilir, ancak bu gezegenin geri kalanı için oldukça alakalı.
Michael K. Borregaard


4

"Alfasayısal olmayan karakterler" demek istiyorsanız, şunu kullanmayı deneyin:

var reg =/[^a-zA-Z0-9]/g      //[^abc]

1

Bu normal ifade C # , PCRE ve Go için çalışır için .

RegexBuddy'den Chrome'da JavaScript için çalışmıyor söylediği gibi . Ama burada bunun bir örneği var.

Bunun ana kısmı şudur:

\p{L}

temsil ettiği \p{L}ya da \p{Letter}herhangi language.` gelen mektupta her türlü


Tam normal ifadenin kendisi: [^\w\d\s:\p{L}]

Örnek: https://regex101.com/r/K59PrA/2


Burada, Unicode aksanlı alfabetikleri doğru bir şekilde ele alan tek cevap budur. Ne yazık ki, tüm regex motorları bu özelliği desteklemiyor (Python bile 3.8'den itibaren yoksun, her ne kadar normal ifade motoru görünürde PCRE tabanlı olsa da).
2019

1
Python'u cevaptan çıkaracağım, bunu test ettiğimi sanıyordum ama görünüşe göre değil. Bunu belirttiğiniz için teşekkürler.
Ste

0

Bunu eklemeyi deneyin:

^[^a-zA-Z\d\s:]*$

Bu benim için çalıştı ... :)


Bu, 2011'den itibaren kabul edilen cevabı tekrar ediyor gibi görünüyor. ^Ve $çapaları, bunu tüm satırlarla eşleşecek şekilde sınırlar ve *nicelik belirteci, boş satırlarla da eşleştiği anlamına gelir.
üçlü

0

JavaScript'te:

/[^\w_]/g

^olumsuzluk, yani aşağıdaki kümede olmayan herhangi bir şeyi seçin

\w herhangi bir kelime karakteri (yani herhangi bir alfanümerik karakter, artı alt çizgi)

_ bir 'kelime' karakteri olarak kabul edildiği için alt çizgiyi reddedin

Kullanım örneği - const nonAlphaNumericChars = /[^\w_]/g;

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.