Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mengehadkan Panjang Input dalam Ungkapan Biasa Menggunakan Lookaheads?

Bagaimana untuk Mengehadkan Panjang Input dalam Ungkapan Biasa Menggunakan Lookaheads?

Linda Hamilton
Linda Hamiltonasal
2024-11-22 16:00:27161semak imbas

How to Restrict Input Length in Regular Expressions Using Lookaheads?

Menghadkan Panjang Input dalam Ungkapan Biasa

Ekspresi biasa menyediakan cara yang berkesan untuk memadankan corak dalam teks dan selalunya perlu menyekat panjang daripada aksara yang dipadankan. Walaupun ini mungkin kelihatan mudah, ia boleh mencabar untuk menggunakan pengkuantiti dengan betul. Dalam artikel ini, kami akan meneroka sebab mengehadkan pengkuantiti pada penghujung corak tidak berfungsi dan menyediakan pendekatan alternatif menggunakan pandangan ke hadapan.

Pertimbangkan ungkapan biasa berikut:

/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*$/

Ungkapan ini sepadan dengan jujukan huruf, digit dan aksara lain, tetapi ia tidak mengehadkan jumlah panjang rentetan input. Untuk mengehadkan aksara kepada 15, kami boleh mencuba:

/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*${1,15}/

Walau bagaimanapun, ini akan mengakibatkan ralat. Sebabnya ialah pengkuantiti terpakai pada subpola serta-merta di sebelah kirinya, bukan keseluruhan corak. Dalam kes ini, pengkuantiti {1,15} digunakan pada kelas aksara kedua, mengehadkan panjangnya kepada 1 hingga 15 aksara, tetapi bukan panjang rentetan keseluruhan.

Sebaliknya, cara yang betul untuk mengehadkan panjang input ialah menggunakan pandangan ke hadapan yang dilabuhkan pada permulaan rentetan:

^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$
  • Tabuh ^ sepadan dengan permulaan rentetan rentetan.
  • Pandangan positif (?=.{1,15}$) menyemak sama ada terdapat 1 hingga 15 aksara sebelum penghujung rentetan ($).
  • Kelas aksara yang tinggal sepadan dengan huruf, digit dan aksara lain yang dibenarkan.

Pandangan ini memastikan keseluruhan rentetan input sepadan dengan panjang yang diingini sekatan.

Nota: Pandangan hadapan ialah penegasan lebar sifar yang tidak menggunakan sebarang aksara. Ia hanya mengembalikan benar atau salah berdasarkan corak seterusnya.

Dalam kes di mana input boleh mengandungi baris baharu, anda boleh menggunakan kelas aksara [sS] mudah alih untuk memadankan mana-mana aksara, termasuk baris baharu:

^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$

Dengan menggunakan lookaheads, kami boleh mengehadkan panjang rentetan input dengan berkesan sambil mengekalkan tingkah laku padanan corak yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Panjang Input dalam Ungkapan Biasa Menggunakan Lookaheads?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn