web-dev-qa-db-fra.com

Expression régulière: autoriser les lettres, les chiffres et les espaces (avec au moins une lettre ou un chiffre)

J'utilise actuellement cette expression régulière ^[A-Z0-9 _]*$ pour accepter les lettres, les chiffres, les espaces et les traits de soulignement. J'ai besoin de le modifier pour exiger au moins un chiffre ou une lettre quelque part dans la chaîne. Toute aide serait appréciée!

Ce serait pour valider les noms d'utilisateur pour mon site Web. En fait, j'aimerais prendre en charge autant de caractères que possible, mais je veux simplement m'assurer que je préviens l'injection de code et que les caractères s'afficheront correctement pour tous les utilisateurs. Je suis donc ouvert aux suggestions de validation regex qui prendraient en charge un plus grand nombre de caractères.

40
makeee

Vous devez simplement spécifier votre RE actuelle, suivie d'une lettre/d'un chiffre suivi de votre RE actuelle:

^[A-Z0-9 _]*[A-Z0-9][A-Z0-9 _]*$

Puisque vous avez maintenant indiqué qu'ils étaient des RE Javascript, il existe un site utile ici où vous pouvez tester le RE par rapport aux données d'entrée.

Si vous voulez aussi des lettres minuscules:

^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$
55
paxdiablo

Pour aller de l'avant et obtenir un point là-bas, au lieu d'utiliser à plusieurs reprises ces:

[A-Za-z0-9 _]
[A-Za-z0-9]

J'ai deux remplaçants (espérons mieux) pour ces deux:

[\w ]
[^\W_]

Le premier correspond à n'importe quel caractère Word (alphanumérique et _, ainsi qu'à Unicode) et à l'espace. Le second correspond à tout ce qui n'est pas un caractère autre que Word ou un trait de soulignement (alphanumérique uniquement, ainsi que Unicode).

Si vous ne voulez pas de correspondance Unicode, restez avec les autres réponses. Mais ceux-ci semblent plus faciles sur les yeux (à mon avis). Prendre la réponse "préférée" au moment d'écrire ces lignes et utiliser les expressions rationnelles plus courtes nous donne:

^[\w ]*[^\W_][\w ]*$

Peut-être plus lisible, peut-être moins. Certainement plus court. Votre choix.

MODIFIER:

En guise de remarque, je suppose que les expressions rationnelles de style Perl sont ici. Votre moteur de regex peut ou non prendre en charge des éléments tels que\w et\W.

EDIT 2:

Testé le mien avec le testeur JS regex auquel quelqu'un lié et quelques exemples basiques a bien fonctionné. N'a fait rien de volumineux, je voulais juste m'assurer que\w et\W fonctionnaient bien dans JS.

EDIT 3:

Après avoir essayé de tester Unicode avec le site de testeur JS regex, j'ai découvert le problème: cette page utilise ISO au lieu de Unicode. Pas étonnant que mon entrée en japonais ne corresponde pas. Eh bien, cela ne devrait pas être difficile à résoudre:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Ou alors Je ne sais pas ce qui devrait être fait en JavaScript, mais je suis sûr que ce n'est pas difficile.

13
Chris Lutz
^[ _]*[A-Z0-9][A-Z0-9 _]*$

Vous pouvez éventuellement avoir des espaces ou des traits de soulignement au début, puis vous avez besoin d’une lettre ou d’un chiffre, puis d’un nombre arbitraire de chiffres, de lettres, d’espaces ou de traits de soulignement.

Quelque chose qui ne contient que des espaces et des caractères de soulignement fera échouer la portion [A-Z0-9].

9
Daniel LeCheminant

Vous pouvez utiliser un lookaround

^(?=.*[A-Za-z0-9])[A-Za-z0-9 _]*$

Il vérifiera à l'avance que la chaîne comporte une lettre ou un chiffre. Dans l'affirmative, il vérifiera que les autres caractères répondent à vos exigences. Cela peut probablement être amélioré, mais cela semble fonctionner avec mes tests. 

METTRE À JOUR: 

Ajout modifications suggéré par Chris Lutz

^(?=.*[^\W_])[\w ]*$/
7
gpojd

pour moi @ "^ [\ w] + $" fonctionne, autorisez le nombre, l'alphabet et l'espace, mais vous devez saisir au moins une lettre ou un chiffre.

2
SOFextreme
$("#ValuationName").bind("keypress", function (event) {
    if (event.charCode!=0) {
        var regex = new RegExp("^[a-zA-Z ]+$");
        var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    }
});
0
areeb

Cela validera contre les caractères spéciaux et les espaces de début et de fin:

var strString = "Your String";

strString.match(/^[A-Za-z0-9][A-Za-z0-9 ]\*[A-Za-z0-9]\*$/)
0
Ajay Nair

Vous pouvez simplement ajouter ceci au fichier jquery.validationEngine-en.js 

    "onlyLetterNumberSp": {
                "regex": ^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$,
                "alertText": "* No special characters allowed"
          },

et appelez-le dans le champ de texte comme 

<input type="text" class="form-control validate[required,custom[onlyLetterNumberSp]]"  id="title" name="title" placeholder="Title"/>
0
Minu Alex