Les pubs vous déplaisent ? Aller Sans pub Auj.

Le Règlement de Référence Régulière du Développeur Patrons à retenir

Publié le
Le Guide de Référence Expressions Régulières du Développeur : Motifs à Retenir---*[Note: The title was split into two lines for readability in French, but the original English structure is preserved as much as possible.]*
Publicité · Supprimer ?

Le répertoire régulier (regex) est l'une de ces compétences qui rapportent des bénéfices dans chaque langage que vous écririez. Le même motif qui valide un e-mail en Python enlève les chaînes de requête en Go et nettoie les entrées de formulaire en JavaScript. Apprenez-le une fois, utilisez-le partout.

Ceci n’est pas un guide de syntaxe. C’est les schémas que vous utilisez réellement dans des projets concrets — ceux qui apparaissent dans les validateurs de formulaires, les parseurs de journaux, les routeurs d’URL et les pipelines de données. Le tableau ci-dessous en est le cœur. La prose qui l’entoure explique où les gens se brûlent.

Les Modèles à Retenir

Ces 11 schémas couvrent les scénarios qui se produisent fréquemment dans le code de production. Utilisez Testeur de regex vérifier-les contre vos propres entrées avant de les intégrer.

ModèleQuoi il correspondExemple de matchRemarques
^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$Adresse emailuser@example.comConçu de manière permissive — la vraie RFC 5322 est un trou d'aiguille. Ancre avec ^$.
https?:\/\/[\w\-._~:/?#[\]@!$&'()*+,;=%]+URL HTTP/HTTPShttps://example.com/path?q=1Ne valide pas la structure — il confirme simplement qu'il s'agit d'une URL.
^(\d{1,3}\.){3}\d{1,3}$Adresse IPv4 (format uniquement)192.168.1.1Correspondances 999.999.999.999 — valider la plage dans le code, pas avec une expression régulière.
^(\+\d{1,3}[\s-])?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$Numéro de téléphone nord-américain(555) 867-5309Gère les délimiteurs courants. Les formats internationaux varient tellement qu'il n'existe pas d'un seul modèle.
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}UUID version 4550e8400-e29b-41d4-a716-446655440000Intrinsèque à la casse — utilisez i ajouter ou supprimer A-F à des caractères spéciaux.
^[a-z0-9]+(?:-[a-z0-9]+)*$lien d'URLmy-article-titleAucun trait d’union en tête ni à la fin, aucun trait d’union consécutif.
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$Date ISO 8601 (AAAA-MM-JJ)2026-04-10Vérifie la mise en forme et l'intervalle, mais pas la validité du calendrier (février 31 passe).
^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$Couleur de CSS en hexadécimal#ff6600 ou #f60Les deux formats de raccourci à trois et six chiffres. Ajouter {8} Pour un hexagone RGBA à 8 chiffres.
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([\w.-]+))?(?:\+([\w.-]+))?$Chaine de version sémantique1.2.3-beta.1+build.42Récupère les métadonnées de pré-lancement et de construction sous forme de groupes optionnels.
\b(?:\d{4}[\s-]?){3}\d{4}\bNuméro de carte bancaire (masqué, ne pas valider)4111 1111 1111 1111Utilisez pour le masquage dans les journaux, pas la validation. La vérification de Luhn nécessite du code.
\s+L'espace blanc court"hello world""hello world"Remplacer par un seul espace pour la normalisation de l'espacement.

Où les schémas se brisent en pratique

Affaires avides contre affaires paresseuses

Les quantificateurs comme * et + Sont avides par défaut – ils consomment autant que possible. Cela vous mord lorsque vous extraire du contenu entre délimiteurs. <.+> sur <b>bold</b> coïncide avec toute la chaîne, pas <b>Passez au mode paresseux .+? arrêter au premier fermant plutôt qu’au dernier.

Anchorage : Quand ^ et $ ne suffisent pas

Sans ancres, un motif peut correspondre n'importe où dans une chaîne de caractères. \d+ correspond (If you meant a different context like "to match" in a broader sense, it remains **coïncider**—but strictly literal: *matches* → *correspond*.) abc123def — il trouve les chiffres au milieu. Pour une validation complète de la chaîne entière, enveloppez les motifs en ^...$En mode multiline (m la drapeau) ^ et $ Trie les limites des lignes, pas celles de la chaîne entière. Si vous validez une seule valeur (une adresse e-mail, un UUID), activez m volontairement, pas par habitude.

La Piège de la Drapeau à Plusieurs Lignes

Le m le drapeau change quoi ^ et $ Signifie. Le s Le drapeau change quoi . correspondances – sans celles-ci, . ne correspond pas aux caractères de retour à la ligne. Analyse des entrées de journal multiline. .+Vous avez besoin s ou [\s\S]+ En tant que solution de repli pour les moteurs qui ne prennent pas en charge dotAll.

Testez avant l'installation

Ne pas insérer un motif de régulation d'expression dans une application et ne le tester que sur une entrée en chemin heureux. Les motifs échouent aux cas limites : caractères Unicode, chaînes vides, espaces avant/après, entrées presque valides mais pas tout à fait. * Testeur de motifs IO Tools vous permet de exécuter un motif contre plusieurs chaînes de test simultanément afin de vérifier les cas valides et les cas invalides côte à côte avant que le code ne soit livré. Référentiel de tricheurs pour les expressions régulières utile lorsque vous êtes au milieu de la création d'un motif et que vous avez besoin d'une référence rapide de syntaxe sans quitter votre navigateur.

Lors de la validation, construisez une matrice : ce qui doit correspondre, ce qui ne doit **absolument pas** l’être et ce qui se situe à la limite. Un vérificateur d’emails qui accepte user@ rejette user+tag@example.co.uk C'est pire qu'aucun validateur du tout.

Répétitions Linguistiques à Connaître

Les schémas de la table ci-dessus sont largement transférables, mais l’engine (le moteur) joue un rôle déterminant aux limites.

  • JavaScript utilise l'**ECMA** moteur de régulation des expressions. Groupes de capture nommés ((?<name>...)Ces fonctionnalités sont prises en charge dans ES2018+. v La flague (introduite dans ES2024) ajoute la notation d'ensemble et les échappements de propriétés Unicode. Les préfixes de recherche fonctionnent ; les postfixes de recherche sont compatibles depuis ES2018 et présentent des restrictions de longueur variables dans certaines anciennes versions de V8.
  • Python utilise re module (proche de PCRE mais pas identique). Le re.compile() le modèle est utile à utiliser — les modèles compilés sont plus rapides lorsqu'ils sont appelés plusieurs fois dans des boucles. Une différence subtile : la programmation en Python \b La délimitation de mots est sensible aux caractères Unicode par défaut, donc elle fonctionne avec les caractères de mots non ASCII. Le JavaScript \b est uniquement en ASCII sauf si vous utilisez u ou v drapeau.
  • Aller utilise la syntaxe RE2, qui exclut délibérément les références en arrière et les prévisions de recherche. Cela s'agit d'une décision de sécurité — RE2 garantit un matching linéaire du temps, ce qui empêche le rebroussement catastrophique. Si vous migrez un motif depuis Python ou JavaScript vers Go et qu'il utilise des prévisions de recherche ou des références en arrière, il faudra réorganiser la logique.

Exemple concret : Validation d’emails à travers les langues

Même modèle, deux implémentations : un validateur de formulaire en JavaScript et une vérification d'entrée en Python.

// JavaScript — client-side form validation
const EMAIL_RE = /^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$/;

function validateEmail(input) {
  const value = input.trim();
  if (!EMAIL_RE.test(value)) {
    throw new Error(`Invalid email address: ${value}`);
  }
  return value;
}

// Usage
document.querySelector('#signup-form').addEventListener('submit', (e) => {
  e.preventDefault();
  try {
    const email = validateEmail(e.target.email.value);
    submitForm({ email });
  } catch (err) {
    showError(err.message);
  }
});
# Python — API request validation
import re

EMAIL_RE = re.compile(r'^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$')

def validate_email(value: str) -> str:
    value = value.strip()
    if not EMAIL_RE.match(value):
        raise ValueError(f"Invalid email address: {value!r}")
    return value

# Usage in a Flask route
@app.route('/signup', methods=['POST'])
def signup():
    try:
        email = validate_email(request.json.get('email', ''))
    except ValueError as e:
        return jsonify({'error': str(e)}), 400
    # continue with valid email...

Les deux utilisent le même modèle de base. La seule différence significative : celle de **Python**. re.compile() Précompile le motif afin que les appels répétés n’en réinterprètent pas une nouvelle fois à chaque invocation — utile dans tout chemin de performance critique.

Conserve une fiche personnelle de révision

Les schémas ci-dessus gèrent les cas courants, mais vous accumulerez vos propres modèles au fil du temps — formats de journalisation spécifiques à votre stack, schémas d’identifiants issus des systèmes internes, formats de dates imposés par votre équipe de données. Une courte liste curatée de schémas testés que vous pouvez copier-coller est plus précieuse que la mémorisation des règles syntaxiques. Testez-les une fois, annotiez-les avec leur utilité, et faites référence à eux plutôt qu’à reconstruire depuis zéro chaque fois.

Envie d'une expérience sans pub ? Passez à la version sans pub

Installez nos extensions

Ajoutez des outils IO à votre navigateur préféré pour un accès instantané et une recherche plus rapide

Sur Extension Chrome Sur Extension de bord Sur Extension Firefox Sur Extension de l'opéra

Le Tableau de Bord Est Arrivé !

Tableau de Bord est une façon amusante de suivre vos jeux, toutes les données sont stockées dans votre navigateur. D'autres fonctionnalités arrivent bientôt !

Publicité · Supprimer ?
Publicité · Supprimer ?
Publicité · Supprimer ?

Coin des nouvelles avec points forts techniques

Impliquez-vous

Aidez-nous à continuer à fournir des outils gratuits et précieux

Offre-moi un café
Publicité · Supprimer ?