Ekspresi reguler untuk membatasi jumlah karakter hingga 10

189

Saya mencoba menulis ekspresi reguler yang hanya akan memungkinkan huruf kecil dan hingga 10 karakter. Apa yang saya lihat sejauh ini:

pattern: /^[a-z]{0,10}+$/ 

Ini tidak berfungsi atau dikompilasi. Saya punya yang berfungsi yang hanya akan memungkinkan huruf kecil yang ini:

pattern: /^[a-z]+$/ 

Tapi saya perlu membatasi jumlah karakter hingga 10.

Peter Mortensen
sumber
4
{} Dan + melakukan hal yang sama (menghitung), sehingga mereka mubazir, maka kesalahannya.
PhiLho
1
Anda harus membuang '+' dari / ^ [az] {0,10} + $ /. Seharusnya / ^ [az] {0,10} $ /
SO Pengguna
1
Perhatikan bahwa ^[a-z]{0,10}+$kompilasi pola pada beberapa bahasa dan beberapa yang terkenal adalah Java, Perl (5.10+), PHP, Ruby (1.9+). Lihat halaman ini untuk detail lebih lanjut.
Jerry
Lihat juga solusi universal melalui lookahead: Membatasi panjang Karakter dalam ekspresi reguler
Vadzim

Jawaban:

356

Anda dapat menggunakan kurung kurawal untuk mengontrol jumlah kejadian. Misalnya, ini berarti 0 hingga 10:

/^[a-z]{0,10}$/

Opsinya adalah:

  • {3} Persisnya 3 kejadian;
  • {6,} Setidaknya 6 kejadian;
  • {2,5} 2 hingga 5 kejadian.

Lihat referensi ekspresi reguler .

Ekspresi Anda memiliki tanda + setelah kurung kurawal penutupan, karenanya kesalahan.

cletus
sumber
Dalam alat dev krom dengan bara saya harus menonaktifkan awal ^untuk mencocokkan properti HANYA permintaan dengan nama seperti 1234atau 5678, dan saya harus menyertakan tanda $
Devin G Rhode
11

/^[a-z]{0,10}$/harus bekerja. /^[a-z]{1,10}$/jika Anda ingin mencocokkan setidaknya satu karakter, seperti /^[a-z]+$/halnya.

Joren
sumber
9

Mungkin bermanfaat untuk menambahkan kecocokan serakah ke akhir string, sehingga Anda dapat menerima string> dari 10 dan regex hanya akan kembali hingga 10 karakter pertama. /^[a-z0-9]{0,10}$?/

jfarrell
sumber
8

Ini sangat tergantung pada program yang Anda gunakan. Program yang berbeda ( Emacs , vi , sed , dan Perl ) menggunakan ekspresi reguler yang sedikit berbeda. Dalam hal ini, saya akan mengatakan bahwa dalam pola pertama, "+" terakhir harus dihapus.

Diego Sevilla
sumber
7
grep '^[0-9]\{1,16\}' | wc -l

Memberikan penghitungan dengan penghitungan kecocokan persis dengan batas

user6911841
sumber