Artikel ini telah dikaji semula oleh Sebastian Seitz dan Almir Bijedic. Terima kasih kepada semua pengulas rakan sebaya di SitePoint untuk mendapatkan kandungan SitePoint untuk yang terbaik!
Hampir setiap pengaturcara perlu menggunakan ungkapan biasa dalam beberapa bentuk dari semasa ke semasa. Bagi ramai, tatabahasa corak mungkin kelihatan misteri dan menakutkan. Tutorial ini akan memperkenalkan corak baru yang sepadan dengan enjin APG-Exp-alternatif yang kaya dengan ciri untuk RegEXP, yang menggunakan sintaks corak ABNF dan lebih mudah dibaca.
<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Nah, jika anda pakar dalam ungkapan biasa, tidak ada apa -apa. Tetapi bagi kita yang lain, mereka mungkin
Walau bagaimanapun, terdapat sintaks alternatif yang telah hampir sama pada masa yang sama, yang sangat popular di kalangan penulis dan pengguna spesifikasi teknikal internet, dengan semua fungsi ekspresi biasa, tetapi jarang dalam penggunaan pengaturcaraan JavaScript dunia . Iaitu, paradigma bacos-nor (ABNF) yang dipertingkatkan, secara rasmi ditakrifkan oleh IETF dalam RFC 5234 dan RFC 7405.
mari kita lihat apa alamat e -mel yang sama seperti di ABNF.
Sudah tentu, ia tidak padat, tetapi seperti HTML dan XML, ia direka untuk dibaca oleh manusia dan mesin. Saya rasa, hanya sedikit pemahaman tentang corak carian wildcard, anda hampir boleh membaca apa yang berlaku di sini dalam "Bahasa Inggeris Mudah".
<code>email-address = local "@" domain local = local-word *("." local-word) domain = 1*(sub-domain ".") top-domain local-word = 1*local-char sub-domain = 1*sub-domain-char top-domain = 2*6top-domain-char local-char = alpha / num / special sub-domain-char = alpha / num / "-" top-domain-char = alpha alpha = %d65-90 / %d97-122 num = %d48-57 special = %d33 / %d35 / %d36-39 / %d42-43 / %d45 / %d47 / %d61 / %d63 / %d94-96 / %d123-126</code>
Alamat e-mel ini untuk regexp dan APG-Exp dibandingkan dengan Contoh 1.
APG-Exp adalah enjin pencocokan corak yang direka untuk melihat dan merasakan regexp, tetapi menggunakan sintaks ABNF untuk definisi corak. Dalam beberapa bahagian yang akan datang, saya akan membimbing anda melalui:
anda kemudian boleh mengaksesnya dalam kod anda menggunakan keperluan ().
<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Contoh:
GitHub
<code>email-address = local "@" domain local = local-word *("." local-word) domain = 1*(sub-domain ".") top-domain local-word = 1*local-char sub-domain = 1*sub-domain-char top-domain = 2*6top-domain-char local-char = alpha / num / special sub-domain-char = alpha / num / "-" top-domain-char = alpha alpha = %d65-90 / %d97-122 num = %d48-57 special = %d33 / %d35 / %d36-39 / %d42-43 / %d45 / %d47 / %d61 / %d63 / %d94-96 / %d123-126</code>
atau muat turunnya sebagai fail zip.
<code>npm install apg-exp --save</code>
cdn
<code>var ApgExp = require("apg-exp"); var exp = new ApgExp(pattern, flags); var result = exp.exec(stringToMatch);</code>
Fail -fail ini di -cache pada pelayan MaxCDN dan anda boleh menggunakannya untuk menguji selagi ia tersedia. Walau bagaimanapun, untuk persekitaran pengeluaran, anda harus meletakkan salinan APGEXP-MIN.JS dan APGEXP.CSS pada pelayan anda sendiri untuk memastikan akses dan masukkannya di halaman anda mengikut cara terbaik untuk permohonan anda.
<code>git clone https://github.com/ldthomas/apg-js2-exp.git apg-exp</code>
(Kandungan berikut telah dipotong kerana panjang artikel. Sila berikan bahagian berikutnya untuk pemprosesan berterusan)
Atas ialah kandungan terperinci Alternatif kepada ungkapan biasa: APG-Exp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!