Regex hanya untuk mencocokkan huruf

374

Bagaimana saya bisa menulis regex yang hanya cocok dengan huruf?

Nike
sumber
58
Apa definisi Anda characters? ASCII? Kanji? Iso-XXXX-X? UTF8?
Ivo Wetzel
45
Apa definisi Anda regex? Perl? Emacs? Grep?
Pascal Cuoq
4
Mengingat bahwa pertanyaannya adalah dalam bahasa Inggris, di situs bahasa Inggris, wajar saja untuk menganggap pertanyaan tersebut mengenai karakter dalam bahasa Inggris.
vaer-k
1
Saya perhatikan bahwa \ p {L} untuk huruf dan / u flag untuk Unicode cocok dengan huruf apa pun di regex saya/\p{L}+/u
MaxZoom
4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. Ini benar. Seperti kita ketahui, penutur bahasa Inggris TIDAK PERNAH melokalisasi aplikasi mereka!
Alex

Jawaban:

392

Gunakan rangkaian karakter: [a-zA-Z]cocok dengan satu huruf dari A – Z dalam huruf kecil dan besar. [a-zA-Z]+cocok dengan satu atau lebih huruf dan ^[a-zA-Z]+$hanya cocok string yang terdiri dari satu atau lebih huruf saja ( ^dan $tandai masing-masing awal dan akhir string).

Jika Anda ingin mencocokkan huruf selain A – Z, Anda dapat menambahkannya ke rangkaian karakter: [a-zA-ZäöüßÄÖÜ] . Atau Anda menggunakan kelas karakter yang telah ditentukan seperti kelas properti karakter Unicode\p{L} yang menjelaskan karakter Unicode yang berupa huruf.

Gumbo
sumber
119
Itu solusi yang sangat ASCII-sentris. Ini akan memecah hampir semua teks non-Inggris.
Joachim Sauer
7
@ Joachim Sauer: Ini lebih baik pada bahasa yang menggunakan karakter non-latin.
Gumbo
15
Sudah mencapai 90% dari teks bahasa Jerman, bahkan tidak menyebutkan Perancis atau Spanyol. Italia mungkin masih cukup baik.
Ivo Wetzel
9
itu tergantung pada definisi "karakter latin" yang Anda pilih. J, U, Ö, Ä semuanya dapat diperdebatkan sebagai karakter latin atau tidak, berdasarkan definisi Anda. Tetapi mereka semua digunakan dalam bahasa yang menggunakan "alfabet latin" untuk menulis.
Joachim Sauer
9
\ p {L} cocok dengan semua aksen sedilla umlaut dll, jadi Anda harus melakukannya.
Radu Simionescu
198

\p{L} cocok dengan apa pun yang merupakan huruf Unicode jika Anda tertarik pada huruf di luar huruf Latin

RobV
sumber
2
tidak dalam semua rasa regex. Misalnya, vim regex memperlakukan \psebagai "Karakter yang dapat dicetak".
Philip Potter
3
halaman ini hanya menyarankan dukungan regex java, .net, perl, jgsoft, XML dan XPath \ p {L}. Tetapi kelalaian utama: python dan ruby ​​(meskipun python memiliki modul regex).
Philip Potter
6
@Philip Potter: Ruby mendukung properti karakter Unicode menggunakan sintaks yang sama persis.
Jörg W Mittag
6
Saya pikir ini harus \p{L}\p{M}*+mencakup surat yang terdiri dari beberapa codepoint, misalnya surat yang diikuti oleh tanda aksen. Sebagai per regular-expressions.info/unicode.html
ZoFreX
dengan python 3 ini menghasilkan kesalahanbad escape \p at position 0
matanster
46

Tergantung pada makna "karakter" Anda:

[A-Za-z]- semua huruf (huruf besar dan kecil)

[^0-9] - semua karakter non-digit

KristofMols
sumber
Maksud saya lettters. Tampaknya tidak berfungsi. preg_match ('/ [a-zA-Z] + /', $ name);
Nike
[A-Za-z] hanyalah deklarasi karakter yang dapat Anda gunakan. Anda masih harus menyatakan berapa kali deklarasi ini harus digunakan: [A-Za-z] {1,2} (untuk mencocokkan 1 atau 2 huruf) atau [A-Za-z] {1, *} (untuk mencocokkan 1 atau lebih surat)
KristofMols
17
yah à, á, ã, Ö, Ä ... juga huruf, demikian juga অ, আ, ই, ঈ, Є, Ж, З, З, ﺡ, ﺥ, ﺩ א, ב, ג, ג, ש, ת, ... en.wikipedia.org/wiki/Letter_%28alphabet%29
phuclv
@ phuclv: Memang, tapi itu tergantung pada encoding, dan encoding adalah bagian dari pengaturan program (baik konfigurasi default atau yang dideklarasikan dalam file konfigurasi program). Ketika saya bekerja pada bahasa yang berbeda, saya biasa menyimpannya dalam konstanta, dalam file konfigurasi.
Catalina Chircu
1
Pengkodean @CatalinaChircu benar-benar tidak relevan di sini. Pengkodean adalah cara untuk menyandikan titik kode dalam karakter yang diatur dalam biner, misalnya UTF-8 adalah pengodean untuk Unicode. Surat OTOH tergantung pada bahasanya, dan jika seseorang mengatakan [A-Za-z]huruf maka bahasa yang digunakan harus ditentukan
phuclv
32

Opsi terdekat yang tersedia adalah

[\u\l]+

yang cocok dengan urutan huruf besar dan kecil. Namun, ini tidak didukung oleh semua editor / bahasa, jadi mungkin lebih aman untuk digunakan

[a-zA-Z]+

seperti yang disarankan pengguna lain

blue_note
sumber
1
Tidak akan cocok dengan karakter khusus apa pun.
Nyerguds
20

Anda akan menggunakannya

/[a-z]/gi

[] - memeriksa karakter apa pun di antara input yang diberikan

az --- mencakup seluruh alfabet

g ----- secara global di seluruh string

saya ----- mendapatkan huruf besar dan kecil

Scott
sumber
14

Ekspresi reguler yang ditulis oleh beberapa orang sebagai "/ ^ [a-zA-Z] $ / i" tidak benar karena pada akhirnya mereka menyebutkan / i yang untuk case-sensitive dan setelah pencocokan untuk pertama kalinya akan kembali kembali. Alih-alih / i hanya menggunakan / g yang untuk global dan Anda juga tidak perlu menaruh ^ $ untuk memulai dan mengakhiri.

/[a-zA-Z]+/g
  1. [a-z _] + cocok dengan satu karakter yang ada dalam daftar di bawah ini
  2. Kuantifikasi: + Antara waktu satu dan tidak terbatas, sebanyak mungkin, memberikan kembali sesuai kebutuhan
  3. az karakter tunggal dalam kisaran antara a dan z (case sensitif)
  4. AZ karakter tunggal dalam kisaran antara A dan Z (case sensitive)
  5. g modifier: global. Semua pertandingan (jangan kembali pada pertandingan pertama)
Yogesh Chauhan
sumber
13

Jawa:

String s= "abcdef";

if(s.matches("[a-zA-Z]+")){
     System.out.println("string only contains letters");
}
Udeshika Sewwandi
sumber
4
itu tidak termasuk tanda-tanda diakritik sepertiŹŻŚĄ
karoluS
11

Untuk PHP, mengikuti akan berfungsi dengan baik

'/^[a-zA-Z]+$/'
Rohit Dubey
sumber
7

Gunakan grup karakter

\D

Cocok dengan karakter apa pun kecuali digit 0-9

^\D+$

Lihat contoh di sini

Tomáš Nedělka
sumber
8
Ini juga akan cocok dengan spasi putih, simbol, dll. Yang sepertinya bukan pertanyaan yang diajukan.
DaveMongoose
Aneh. Baru saja downvote tentang ini, dan itu bukan aku!
Dave Everitt
6

Cukup gunakan \watau [:alpha:]. Ini adalah urutan pelarian yang hanya cocok dengan simbol yang mungkin muncul dalam kata-kata.

Agaspher
sumber
9
\wmungkin bukan solusi yang baik dalam semua kasus. Setidaknya di PCRE, \wbisa cocok dengan karakter lain juga. Mengutip manual PHP : " Karakter" kata "adalah huruf atau digit atau karakter garis bawah, yaitu, karakter apa pun yang dapat menjadi bagian dari" kata "Perl. Definisi huruf dan angka dikontrol oleh tabel karakter PCRE, dan dapat bervariasi jika pencocokan khusus lokal terjadi. Misalnya, di lokal "fr" (Prancis), beberapa kode karakter yang lebih besar dari 128 digunakan untuk huruf beraksen, dan ini dicocokkan dengan \ w. ".
Amal Murali
kata-kata termasuk karakter lain dari surat
V-SHY
2
\wberarti huruf dan angka yang cocok
Eugen Konkov
4

Jika Anda bermaksud huruf apa pun dalam pengkodean karakter apa pun, maka pendekatan yang baik mungkin untuk menghapus non-huruf seperti spasi \s, angka \d, dan karakter khusus lainnya seperti:

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]

Atau gunakan negasi dari negasi di atas untuk secara langsung menggambarkan surat apa pun:

\S \D and [^  ..special chars..]

Pro:

  • Bekerja dengan semua rasa regex.
  • Mudah menulis, terkadang menghemat banyak waktu.

Cons:

  • Panjang, terkadang tidak sempurna, tetapi pengkodean karakter dapat rusak juga.
Sławomir Lenart
sumber
4

Anda dapat mencoba ungkapan reguler ini: [^\W\d_]atau [a-zA-Z].

Motlab
sumber
Bukan itu [^\W|\d]artinya
OGHaza
1
[^\W|\d]artinya tidak \Wdan tidak |dan tidak \d. Ini memiliki efek bersih yang sama karena |merupakan bagian dari \Wtetapi |tidak berfungsi seperti yang Anda pikirkan. Itupun berarti itu menerima _karakter. Anda mungkin mencari[^\W\d_]
OGHaza
Saya setuju dengan Anda, ia menerima _. Tapi "TIDAK" |sama dengan "DAN", jadi [^\W|\d]artinya: TIDAK \W DAN TIDAK\d
Motlab
12
[^ab]artinya tidak adan tidak b. [^a|b]artinya tidak adan tidak |dan tidak b. Untuk memberikan contoh kedua [a|b|c|d]adalah persis sama seperti [abcd|||]yang persis sama seperti [abcd|]- yang semuanya menyamakan ([a]|[b]|[c]|[d]|[|])yang |adalah karakter literal, bukan operator OR. Operator ATAU tersirat di antara setiap karakter dalam kelas karakter, dengan meletakkan |sarana aktual yang Anda inginkan agar kelas menerima karakter |(pipa).
OGHaza
1

Akhir-akhir ini saya menggunakan pola ini dalam formulir saya untuk memeriksa nama-nama orang, yang berisi huruf, kosong, dan karakter khusus seperti tanda aksen.

pattern="[A-zÀ-ú\s]+"
camilablnpa
sumber
Anda harus melihat tabel ASCII. A-zcocok lebih dari sekedar huruf, dan jugaÀ-ú
Toto
0

pattern = / [a-zA-Z] /

menempatkan "[a-zA-Z]: # {pattern.match (" mine blossom ")}" OK

menempatkan "[a-zA-Z]: # {pattern.match (" 456 ")}"

menempatkan "[a-zA-Z]: # {pattern.match (" ")}"

menempatkan "[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"

menempatkan "[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" OK

Snm Maurya
sumber
3
Dan bagaimana dengan misalnya, “Zażółć gęslą jaźń”?
Saksi
-2
Pattern pattern = Pattern.compile("^[a-zA-Z]+$");

if (pattern.matcher("a").find()) {

   ...do something ......
}
Fikreselam Elala
sumber