Ekspresi Reguler untuk mencocokkan hanya karakter alfabet


157

Saya bertanya-tanya apakah saya bisa mendapatkan ekspresi reguler yang akan cocok dengan string yang hanya memiliki karakter alfabet, dan itu saja.


2
Sesuatu seperti / ^ [a-zA-Z] + $ / harus berfungsi.
Julian Go

10
Apakah àkarakter alfabet sesuai dengan definisi Anda? Bahasa apa yang Anda gunakan?
Tim Pietzcker

2
haruskah senar kosong cocok?
ysth

tidak string yang kosong tidak boleh cocok
Steffan Harris

Satu catatan penting: Anda tidak merujuk bahasa atau alat tempat Anda ingin menggunakan regex yang Anda minta. Meskipun prinsip-prinsip regex sama secara universal, sintaksinya tidak sama di mana-mana. Anda harus merujuk tempat Anda ingin menggunakannya.
sergiol

Jawaban:


186

Anda dapat menggunakan salah satu dari 2 varian ini:

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

untuk mencocokkan string input huruf ASCII.

  • [A-Za-z] akan cocok dengan semua huruf (baik huruf kecil dan besar).
  • ^dan $akan memastikan bahwa tidak ada apa pun selain huruf-huruf ini yang cocok.

Kode:

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

Keluaran:

array(0) {
}

Kasing uji untuk komentar OP yang ingin dicocokkan hanya jika ada 1 atau lebih huruf yang ada dalam input. Seperti yang Anda lihat dalam kasus uji yang cocok gagal karena ada ^di string input abcAbc^Xyz.

Catatan: Harap dicatat bahwa jawaban di atas hanya cocok dengan huruf ASCII dan tidak cocok dengan karakter Unicode. Jika Anda ingin mencocokkan huruf Unicode maka gunakan:

/^\p{L}+$/u

Di sini, \p{L}cocok dengan semua jenis huruf dari bahasa apa pun


22
Dalam beberapa dialek, [Az] akan cocok dengan nilai tanda baca ASCII yang terjadi antara 'Z' dan 'a', khususnya '[', '\', ']', '^', '-' dan '`', seperti juga 'A' sampai 'Z' dan 'a' sampai 'z'.
Lee

Yang saya benar-benar inginkan adalah cara untuk mencocokkan string saya hanya ketika memiliki karakter alfabet, jika memiliki karakter non alfabet, itu tidak harus cocok.
Steffan Harris

7
@ Lee: Tidak beberapa. Mereka semua. Regex ini salah dalam kondisi saat ini.
Tim Pietzcker

7
\w is shorthand for A-Za-z- tidak juga, \wadalah singkatan untuk[a-zA-Z0-9_]
anubhava

1
Poin bagus @ jpmc26. Saya telah mengedit jawaban saya untuk menghapus kesalahan asli saya.
anubhava

55

Jika Anda perlu memasukkan karakter alfabet non-ASCII, dan jika rasa regex Anda mendukung Unicode, maka

\A\pL+\z

akan menjadi regex yang benar.

Beberapa mesin regex tidak mendukung sintaks Unicode ini tetapi memungkinkan \wsingkatan alfanumerik juga cocok dengan karakter non-ASCII. Dalam hal ini, Anda bisa mendapatkan semua alfabet dengan mengurangi angka dan garis bawah dari \wseperti ini:

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

\Acocok pada awal string, \zpada akhir string ( ^dan $juga cocok pada awal / akhir baris dalam beberapa bahasa seperti Ruby, atau jika opsi regex tertentu diatur).


38
+1 karena tidak mempertimbangkan alfabet Inggris sebagai satu-satunya alfabet
srcspider

7
+1, sama seperti di atas. bahasa inggris bukan satu-satunya alfabet dan banyak orang menulis nama mereka menggunakan karakter non-ascii untuk mengekspresikannya dengan benar.
Ben Barkay

22

Ini akan cocok dengan satu atau lebih karakter alfabet:

/^[a-z]+$/

Anda dapat membuatnya case sensitive menggunakan:

/^[a-z]+$/i

atau:

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

Ini hanya akan cocok dengan karakter latin.
quotesBro


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.