118 votes

Regex pour faire correspondre les symboles : !$%^&*()_+|~-=`{}[] :";'<> ?,./

J'essaie de créer un test Regex en JavaScript qui testera si une chaîne contient l'un de ces caractères :

!$%^&*()_+|~-=`{}[]:";'<>?,./

Plus d'informations si vous êtes intéressé :)

C'est pour une application de changement de mot de passe assez sympa sur laquelle je travaille. Au cas où vous seriez intéressés, voici le reste du code.

J'ai un tableau qui liste les exigences en matière de mot de passe et lorsque l'utilisateur final tape le nouveau mot de passe, il teste un tableau de Regex et place une coche dans la ligne correspondante du tableau s'il... se vérifie :) J'ai juste besoin d'ajouter celle-ci à la place du 4ème élément de la table validation de la gamme.

var validate = function(password){
    valid = true;

    var validation = [
        RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password), 
        RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password), 
        !RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password), 
        !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7)
    ]

    $.each(validation, function(i){
        if(this)
            $('.form table tr').eq(i+1).attr('class', 'check');
        else{
            $('.form table tr').eq(i+1).attr('class', '');
            valid = false
        }
    });

    return(valid);

}

Oui, il y a aussi une validation correspondante côté serveur !

0voto

Arni Gudjonsson Points 409
// The string must contain at least one special character, escaping reserved RegEx characters to avoid conflict
  const hasSpecial = password => {
    const specialReg = new RegExp(
      '^(?=.*[!@#$%^&*"\\[\\]\\{\\}<>/\\(\\)=\\\\\\-_´+`~\\:;,\\.€\\|])',
    );
    return specialReg.test(password);
  };

-1voto

Pourquoi pas (?=\W_)(?=\S). ? Il vérifie que le caractère correspondant à l'élément . n'est pas un caractère verbal (cependant _ est autorisé) et qu'il ne s'agit pas d'un espace blanc.

Note : comme @Casimir et Hippolyte l'ont fait remarquer dans un autre commentaire, cela correspondra également à des caractères comme é et autres. Si vous n'attendez pas de tels caractères, cette solution fonctionne.

-3voto

user990156 Points 221
  1. Voir le code ci-dessous, vous devrez le faire pour chaque caractère et échapper les caractères spéciaux.

    /(!|\$|%|\^)/.test(password)

  2. Une autre solution consisterait à placer les caractères dans un tableau et à passer en boucle sur chacun d'entre eux pour vérifier s'il se trouve dans la chaîne.

-11voto

Yaron Landau Points 37

Remplacez toutes les lettres de n'importe quelle langue par "A" et, si vous le souhaitez, tous les chiffres par 0 :

return str.replace(/[^\s!-@[-`{-~]/g, "A").replace(/\d/g, "0");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X