web-dev-qa-db-fra.com

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

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

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

Plus d'infos si cela vous intéresse:)

Je travaille sur une application de changement de mot de passe plutôt cool. Au cas où vous seriez intéressé, voici le reste du code.

J'ai un tableau qui répertorie les exigences en matière de mot de passe et, lorsque les utilisateurs finaux saisissent le nouveau mot de passe, il testera un tableau de regex et placera une coche dans la ligne correspondante du tableau si elle ... vérifie :) Il me suffit d'ajouter celui-ci. à la place du 4ème élément du tableau validation.

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 la validation côté serveur correspondante!

77
pixelbobby

L'expression régulière pour cela est très simple. Utilisez simplement une classe de personnage. Le trait d'union est un caractère spécial dans les classes de caractères, il doit donc être le premier:

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

Vous devez également échapper aux autres métacaractères d'expression régulière.

Edit: Le trait d'union est spécial car il peut être utilisé pour représenter une plage de caractères. Cette même classe de caractères peut être simplifiée avec des plages à ceci:

/[$-/:-?{-~!"^_`\[\]]/

Il y a trois gammes. '$' à '/', ':' à '?' et '{' à '~'. la dernière chaîne de caractères ne peut pas être représentée plus simplement avec une plage:! "^ _` [].

Utilisez un table ACSII pour rechercher des plages pour les classes de caractères.

143
Jeff Hillman

Le moyen le plus simple et le plus court consiste à utiliser ceci:

/[\W\S]/

Cela signifie: Tous les caractères qui ne sont pas un chiffre ou une lettre anglaise (\W) ou un caractère d'espacement (\S).

Ce n'est peut-être pas aussi parfait que la solution de Jeff, mais c'est beaucoup plus simple et je ne pense pas que ce soit différent du point de vue pratique.

3
Amir