Cet article a été évalué par des pairs par Sebastian Seitz et Almir Bijedic. Merci à tous les pairs examinateurs de SitePoint pour avoir obtenu le contenu de SitePoint à son meilleur!
Presque tous les programmeurs doivent utiliser des expressions régulières sous une certaine forme de temps à autre. Pour beaucoup, la grammaire de motifs peut sembler mystérieuse et intimidante. Ce tutoriel introduira un nouveau motif de motif APG-Exp, une alternative riche en fonctionnalités à RegExP, qui utilise la syntaxe du modèle ABNF et est plus facile à lire.
Avez-vous déjà eu besoin de vérifier votre adresse e-mail et de rencontrer quelque chose comme ça?
<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Le moteur de correspondance de motif est le bon outil pour ce travail. Il s'agit d'une expression régulière bien conçue et bien écrite. Cela fonctionne bien. Alors qu'est-ce que tu n'aimes pas d'autre?
Eh bien, si vous êtes un expert en expressions régulières, il n'y a rien. Mais pour le reste d'entre nous, ils pourraient être
La grammaire d'expression régulière a une histoire longue et longue et a été profondément intégrée dans de nombreux outils et langages que nous utilisons en tant que programmeurs chaque jour.
Cependant, il existe une syntaxe alternative qui existe depuis presque le même temps, qui est très populaire parmi les écrivains et les consommateurs de spécifications techniques sur Internet, avec toutes les fonctions d'expressions régulières, mais est rarement dans l'utilisation du monde de la programmation JavaScript . C'est-à-dire le paradigme BACOS-NOR amélioré (ABNF), officiellement défini par l'IETF dans RFC 5234 et RFC 7405.
Voyons à quoi ressemble la même adresse e-mail dans ABNF.
<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>
Bien sûr, ce n'est pas compact, mais comme HTML et XML, il est conçu pour être lu par les humains et les machines. Je suppose que, juste un peu de compréhension des modèles de recherche générique, vous pouvez presque lire ce qui se passe ici dans "Simple English".
Cette adresse e-mail pour Regexp et APG-Exp est comparée dans l'exemple 1.
APG-Exp est un moteur de correspondance de motif conçu pour avoir l'apparence de regexp, mais utilise la syntaxe ABNF pour la définition du modèle. Dans les prochaines sections, je vous guiderai à travers:
Si vous travaillez dans un environnement Node.js, exécutez à partir de votre répertoire de projet:
<code>^[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$</code>
Vous pouvez ensuite y accéder dans votre code en utilisant require ().
Exemple:
<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>
Pour obtenir une copie du code de GitHub, vous pouvez cloner le référentiel à votre répertoire de projet:
<code>npm install apg-exp --save</code>
ou téléchargez-le en tant que fichier zip.
puis dans page.html:
<code>var ApgExp = require("apg-exp"); var exp = new ApgExp(pattern, flags); var result = exp.exec(stringToMatch);</code>
Vous pouvez également utiliser RawGit pour créer des versions CDN directement à partir du code source GitHub. Cependant, assurez-vous de ne lire pas de disponibilité ou de garantie de support (assurez-vous en fait de lire toute la FAQ).
Tous les exemples de ce tutoriel utilisent ce qui suit.
<code>git clone https://github.com/ldthomas/apg-js2-exp.git apg-exp</code>
Ces fichiers sont mis en cache sur le serveur MAXCDN et vous pouvez les utiliser pour tester tant qu'ils sont disponibles. Cependant, pour les environnements de production, vous devez placer des copies d'APGEXP-Min.js et APGEXP.CSS sur votre propre serveur pour assurer l'accès et les inclure dans votre page en fonction de la meilleure façon pour votre application.
(Le contenu suivant a été tronqué en raison de la durée de l'article. Veuillez fournir la partie suivante pour le traitement continu)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!