Yalnızca alfabetik karakterlerle eşleşecek Normal İfade


157

Ben sadece alfabetik karakterler ve bu yalnız bir dize eşleşecek düzenli bir ifade alabilir miyim merak ediyordum.


2
/ ^ [A-zA-Z] + $ / gibi bir şey çalışmalıdır.
Julian Go

10
àbir alfabetik karakter tanımlarınıza göre? Hangi dili kullanıyorsun
Tim Pietzcker

2
boş bir dize eşleşmeli mi?
ysth

boş bir dize eşleşmemeli
Steffan Harris

Önemli bir not: sorduğunuz normal ifadeyi kullanmak istediğiniz bir dile veya araca başvurmadınız. Normal ifadelerin ilkeleri evrensel olarak aynı olsa da, sözdizimi her yerde eşit değildir. Nerede kullanmak istediğinizi belirtmelisiniz.
sergiol

Yanıtlar:


186

Bu 2 varyanttan herhangi birini kullanabilirsiniz:

/^[A-Z]+$/i
/^[A-Za-z]+$/

ASCII alfabe giriş dizesiyle eşleştirmek için.

  • [A-Za-z] tüm alfabe ile eşleşir (hem küçük hem de büyük harf).
  • ^ve $bu alfabe dışında hiçbir şeyin eşleşmeyeceğinden emin olacaksınız.

Kod:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

Çıktı:

array(0) {
}

Test durumu , yalnızca girişte 1 veya daha fazla alfabe varsa eşleştirmek istediği yorumu içindir . Test durumunda gördüğünüz ^gibi, giriş dizesinde olduğundan eşleşme başarısız oldu abcAbc^Xyz.

Not: Yukarıdaki cevabın sadece ASCII alfabe ile ve Unicode karakterlerle eşleşmediğini lütfen unutmayın . Unicode harfleri eşleştirmek istiyorsanız şunu kullanın:

/^\p{L}+$/u

Burada, \p{L}herhangi bir dilden gelen herhangi bir harfle eşleşir


22
Bazı lehçelerde, [Az] 'Z' ve 'a', özellikle '[', '\', ']', '^', '-' ve '' 'arasında oluşan ASCII noktalama değerleriyle eşleşir. 'A' ile 'Z' ve 'a' ile 'z' arasında.
Lee

Gerçekten istediğim, alfabetik karakterler olduğunda dizgimi eşleştirmenin yolu, alfabetik olmayan bir karaktere sahip olması durumunda eşleşmemelidir.
Steffan Harris

7
@Lee: Bazıları değil. Hepsi. Bu normal ifade şu anki durumunda yanlış.
Tim Pietzcker

7
\w is shorthand for A-Za-z- değil gerçekten, \wiçin kestirmeden[a-zA-Z0-9_]
anubhava

1
İyi bir nokta @ jpmc26. Orijinal hatayı gidermek için cevabımı düzenledim.
anubhava

55

ASCII olmayan alfabetik karakterler eklemeniz gerekiyorsa ve normal ifadenizdeki lezzet Unicode'u destekliyorsa,

\A\pL+\z

doğru regex olurdu.

Bazı normal ifade motorları bu Unicode sözdizimini desteklemez, ancak \walfasayısal stenonun ASCII olmayan karakterlerle de eşleşmesine izin verir . Bu durumda, rakamları ve alt çizgileri aşağıdaki \wgibi çıkararak tüm alfabeleri alabilirsiniz :

\A[^\W\d_]+\z

\Adizenin başlangıcında, dizenin \zsonunda eşleşir ( ^ve $ayrıca Ruby gibi bazı dillerde satırların başında / sonunda veya belirli normal ifade seçenekleri ayarlanmışsa eşleşir).


38
İngilizce alfabeyi tek alfabe olarak görmediği için +1
srcspider

7
+1, yukarıdakiyle aynı. ingilizce tek alfabe değildir ve birçok kişi ismini doğru ifade etmek için ascii olmayan karakterler kullanarak yazar.
Ben Barkay

22

Bu, bir veya daha fazla alfabetik karakterle eşleşir:

/^[a-z]+$/

Aşağıdakileri kullanarak büyük / küçük harfe duyarsız yapabilirsiniz:

/^[a-z]+$/i

veya:

/^[a-zA-Z]+$/

Bu yalnızca latin karakterlerle eşleşir.
quotesBro


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.