menguatkuasakan panjang aksara dalam ekspresi biasa
Ekspresi biasa sering memerlukan sekatan panjang. Tanpa mereka, regex akan memadankan rentetan panjang apa pun. Walaupun kuantum kelihatan seperti penyelesaian (mis.,), mereka tidak berfungsi secara langsung pada keseluruhan rentetan. Ini kerana kuantifi hanya menjejaskan elemen yang terdahulu. {1,15}
<code class="language-javascript">var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,?()""']*${1,15}/ // Error!</code>
Penyelesaian Lookahead
Pendekatan yang betul menggunakan pernyataan Lookahead yang positif:
<code class="language-javascript">^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$</code>
Memahami Lookahead
adalah kunci. Lookahead positif ini menegaskan bahawa keseluruhan rentetan (dari awal (?=.{1,15}$)
hingga akhir ^
) mengandungi antara 1 dan 15 aksara ($
). Ia .{1,15}
tidak menggunakan mana -mana aksara; Ia hanya memeriksa keadaan. Selebihnya regex kemudian sepadan dengan aksara yang dibenarkan dalam kekangan panjang itu. [a-zA-Z0-9]*[^$%^&*;:,?()""']*$
Mengendalikan Newlines
Jika rentetan anda mungkin termasuk aksara baru, gunakan kelas watak yang lebih mantap untuk memadankan mana -mana watak, termasuk garis baru:
<code class="language-javascript">^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$</code>
sepadan dengan mana-mana Whitespace atau White-Whitespace Watak. Ini memastikan pemeriksaan panjang berfungsi dengan betul walaupun dengan input multiline. Ini menyediakan kaedah yang boleh dipercayai untuk menguatkuasakan had panjang aksara dalam ungkapan biasa. [sS]
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguatkuasakan Had Panjang Aksara dalam Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!