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.

Steffan Harris
sumber
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

anubhava
sumber
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).

Tim Pietzcker
sumber
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]+$/
stevecomrie
sumber
Ini hanya akan cocok dengan karakter latin.
quotesBro
13

Di Ruby dan bahasa lain yang mendukung kelas karakter POSIX dalam ekspresi braket, Anda dapat melakukannya dengan mudah:

/\A[[:alpha:]]+\z/i

Itu akan cocok dengan alpha-chars di semua bahasa alfabet Unicode. Peasy mudah.

Info lebih lanjut: http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html

jshkol
sumber
1
Dan untuk mendapatkan semuanya kecuali karakter-karakter itu (yang tidak didokumentasikan) gunakan [^[:alpha]].
spyle
6

[a-zA-Z] harus melakukan itu dengan baik.

Anda dapat referensi lembar contekan .

Frazell Thomas
sumber
2
ya tapi saya juga akan jika string saya berisi karakter non-kata itu masih akan cocok
Steffan Harris