2017-07-06 13 views
-1

Je n'ai pas d'expérience sur les expressions régulières. J'ai besoin d'une expression régulière qui ne permet pas de répéter des caractères spéciaux (+ - */& etc.) La chaîne peut contenir des chiffres, des caractères alphanumériques et des caractères spéciaux.Regex: comment éviter les caractères spéciaux répétés?

Cela devrait être valable: abc, df

Cela devrait être invalide: ABC-, df

je serai vraiment apprécié si vous pouvez me aider! Merci d'avance.

+1

Que considérez-vous comme un caractère spécial? '' 'et', 'sont également 'spéciaux' – Brandon

Répondre

1

Deux solutions présentées correspondent donc bien une chaîne qui est pas autorisés.

Mais le tilte est Comment prévenir ..., donc je suppose que le regex doit correspondre à la chaîne a permis. Cela signifie que le regex doit:

  • match de l'ensemble de la chaînesi elle ne contient pas 2 caractères spéciaux consécutifs,
  • ne correspondent pas autrement.

Vous pouvez réaliser cette assembler les pièces suivantes:

  • ^ - début de l'ancre de chaîne,
  • (?!.*[...]{2}) - une préanalyse négative pour 2 spéciaux consécutifs caractères (marqués ici ...), dans n'importe quel endroit,
  • une expression rationnelle correspondant à la chaîne entière (non vide),
  • $ - extrémité de l'ancrage de la chaîne.

Ainsi toute regex devrait être:

^(?!.*[[email protected]#$%^&*()\-_+={}[\]|\\;:'",<.>\/?]{2}).+$ 

Notez que dans une classe de char (entre [ et ]) une barre oblique inverse échapper à l'omble chevalier suivant doit être placé avant - (si au milieu de la séquence), fermeture du crochet, une barre oblique inverse elle-même et / (terminaison regex).

Ou si vous voulez appliquer la regex à mots individuels (pas toute la chaîne ), le regex doit être:

\b(?!\S*[[email protected]#$%^&*()\-_+={}[\]|\\;:'",<.>\/?]{2})\S+ 
+0

Cela fonctionne très bien, vous avez sauvé ma journée. Vraiment apprécié, merci! – asyaben

0

Utilisez l'expression régulière suivante pour faire correspondre la chaîne non valide.

[^A-Za-z0-9]{2,}