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

J'utilise actuellement cette expression rationnelle ^[A-Z0-9 _]*$ pour accepter les lettres, les chiffres, les espaces et les traits de soulignement. Je dois le modifier pour exiger au moins un nombre 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. Je voudrais réellement prendre en charge autant de caractères que possible, mais je veux juste m'assurer que j'empêche l'injection de code et que les caractères s'afficheront bien pour tous les utilisateurs. Donc je suis définitivement ouvert à la validation regex suggestions qui soutiendraient un ensemble plus large de caractères.

39
demandé sur Alan Moore 2009-02-23 03:43:54

8 réponses

Il vous suffit de spécifier votre RE actuelle, suivie d'une lettre/numéro suivi de votre RE actuelle à nouveau:

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

Puisque vous avez maintenant déclaré qu'ils sont des REs Javascript, il y a un site utile ici où vous pouvez tester les RE contre les 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
répondu paxdiablo 2009-02-23 02:14:39

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 (j'espère mieux) remplacements pour ces deux:

[\w ]
[^\W_]

Le premier correspond à n'importe quel caractère de mot (alphanumérique et _, ainsi Qu'Unicode) et à l'espace. La seconde correspond à tout ce qui n'est pas un caractère non-mot ou un trait de soulignement (alphanumérique uniquement, ainsi Qu'Unicode).

Si vous ne voulez pas de correspondance Unicode, respectez les autres réponses. Mais ces il suffit de regarder plus facile sur les yeux (à mon avis). Prendre la réponse "préférée" à partir de cette Écriture et utiliser les expressions rationnelles plus courtes nous donne:

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

Peut-être plus lisible, peut-être moins. Certainement plus courte. De votre choix.

Modifier:

Juste comme une note, je suppose des expressions rationnelles de style Perl ici. Votre moteur regex peut ou non supporter des choses comme \w et \ W.

Édition 2:

Testé le mien avec le testeur js regex auquel quelqu'un est lié et quelques exemples de base ont bien fonctionné. Je n'ai rien fait de vaste, je voulais juste m'assurer que \w et \W fonctionnaient bien dans JS.

Édition 3:

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

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

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

13
répondu Chris Lutz 2009-02-23 02:30:53
^[ _]*[A-Z0-9][A-Z0-9 _]*$

Vous pouvez éventuellement avoir des espaces ou des traits de soulignement à l'avant, alors vous avez besoin d'une lettre ou d'un nombre, puis d'un nombre arbitraire de chiffres, de lettres, d'espaces ou de traits de soulignement après cela.

Quelque chose qui ne contient que des espaces et des traits de soulignement échouera la partie [A-Z0-9].

9
répondu Daniel LeCheminant 2009-02-23 00:57:09

Vous pouvez utiliser un lookaround:

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

Il vérifiera à l'avance que la chaîne a une lettre ou un nombre, si c'est le cas, il vérifiera que le reste des caractères répond à vos besoins. Cela peut probablement être amélioré, mais cela semble fonctionner avec mes tests.

Mise à jour:

Ajout de modifications suggéré par Chris Lutz:

^(?=.*[^\W_])[\w ]*$/
7
répondu gpojd 2017-05-23 12:02:34

Pour moi @ "^[\w] + $ " fonctionne, autorise le nombre, l'alphabet et l'espace, mais doit taper au moins une lettre ou un nombre.

2
répondu SOFextreme 2010-09-28 04:12:48

Cela validera par rapport aux caractères spéciaux et aux 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
répondu Ajay Nair 2013-04-12 10:29:22
$("#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
répondu areeb 2013-05-06 08:01:46

Simplement, vous pouvez ajouter ceci à jquery.validationEngine-FR.fichier 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
répondu Minu Alex 2015-05-19 04:50:17