7
votes

Regexp.test retournant toujours false

J'ai le code suivant sur jsfiddle:

http://jsfiddle.net/acg2d/ P>

$(document).ready(function() {
    $('.testThis').click(function() {
        $('.regexValidation').each(function() {
            if ($(this).val() != "" || $(this).val() != null) {
                // Check the regex
                var expression = new RegExp('/^[0-9a-z_]+$/i');
                var myVal = $(this).val();
                if (expression.test(myVal) == true) {
                    // All is okay
                    alert("OK");
                } else {
                    alert("Error");
                }
            }
        });
    });    
});


0 commentaires

4 Réponses :


13
votes

Votre syntaxe est fausse.

changez-le à var expression = / ^ [0-9a-z _] + $ / i;

Contrairement à PHP, JavaScript prend en charge Regex littéraux le syntaxe /.../ crée un objet REGEXP objet.

Le constructeur regexp prend une regex comme une chaîne, sans séparateurs.
Par conséquent, vous pouvez également écrire nouveau regexp ('^ [0-9a-z _] + $', 'i')


2 commentaires

Bien, tu apprends quelque chose de nouveau tous les jours! Je pensais que le manque de citations pourrait causer des erreurs JS, mais évidemment pas. Merci pour la réponse et l'explication.


Merci, cela me sauve-moi, mais aussi, vous devez éliminer les espaces dans chaque littéral. J'essayais de faire cela: [#,%] mais toujours retourné faux. Puis la vraie expression est sans espace, cela signifie: [#,%]. J'espère que cela vous aidera à l'avenir. (y)



8
votes

Supprimer des citations de votre REGEXP:

var expression = new RegExp(/^[0-9a-z_]+$/i);


0 commentaires

2
votes

Sortez les citations telles que ceci: nouvelle REGEXP (/ ^ [0-9a-z _] + $ / i);


1 commentaires

@IGOR DYMOV et @MRCHIEFF: Y a-t-il un avantage à utiliser nouvelle Regexp (/ /) au lieu de / / ?



0
votes

Utilisez SLASH "/" au lieu de citations, au début et à la fin de l'expression régulière.

Pour votre code, cela devrait être comme ça -

var expression = nouveau regexp (/ ^ [0-9a-z _] + $ / i);


0 commentaires