Comment puis-je valider une chaîne à l'aide d'expressions régulières pour n'autoriser que les caractères alphanumériques?
(Je ne veux pas non plus autoriser d'espaces).
Utilisez l'expression suivante:
^[a-zA-Z0-9]*$
c'est à dire:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
Dans .NET 4.0, vous pouvez utiliser LINQ:
yourText.All
arrêtera d'exécuter et retournerafalse
les premierschar.IsLetterOrDigit
rapports de tempsfalse
puisque le contrat deAll
ne peut pas être exécuté alors.Remarque! cette réponse ne vérifie pas strictement les alphanumériques (qui sont généralement AZ, az et 0-9). Cette réponse autorise les caractères locaux comme
åäö
.Mise à jour 2018-01-29
La syntaxe ci-dessus ne fonctionne que lorsque vous utilisez une seule méthode qui a un seul argument du type correct (dans ce cas
char
).Pour utiliser plusieurs conditions, vous devez écrire comme ceci:
la source
char.IsLetterOrDigit('ก')
retourneratrue
. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8caVous pouvez le faire facilement avec une fonction d'extension plutôt qu'une regex ...
Par commentaire :) ...
la source
char.IsLetterOrDigit
plutôt IsLetter + IsNumberBien que je pense que la solution basée sur les regex est probablement la voie à suivre, je serais tenté de l'encapsuler dans un type.
Désormais, lorsque vous avez besoin d'une chaîne validée, vous pouvez faire en sorte que la signature de la méthode nécessite une AlphaNumericString, et sachez que si vous en obtenez une, elle est valide (à l'exception des valeurs nulles). Si quelqu'un tente de passer une chaîne non validée, cela générera une erreur du compilateur.
Vous pouvez devenir plus sophistiqué et implémenter tous les opérateurs d'égalité, ou un cast explicite en AlphaNumericString à partir d'une chaîne de caractères classique, si vous vous en souciez.
la source
static public implicit operator string
partieJ'avais besoin de vérifier AZ, az, 0-9; sans regex (même si l'OP demande une regex).
Mélange de diverses réponses et commentaires ici, et discussion de https://stackoverflow.com/a/9975693/292060 , cela teste la lettre ou le chiffre, évite les lettres d'autres langues et évite d'autres nombres tels que les fractions.
la source
^\w+$
permettraa-zA-Z0-9_
Utilisez
^[a-zA-Z0-9]+$
pour interdire le trait de soulignement.Notez que les deux nécessitent que la chaîne ne soit pas vide. Utiliser
*
au lieu de+
autorise les chaînes vides.la source
^[\w-]+$
Afin de vérifier si la chaîne est à la fois une combinaison de lettres et de chiffres, vous pouvez réécrire la réponse @jgauffin comme suit en utilisant .NET 4.0 et LINQ:
la source
Même réponse qu'ici .
Si vous voulez une
A-z 0-9
vérification ASCII non-regex , vous ne pouvez pas utiliserchar.IsLetterOrDigit()
car cela inclut d'autres caractères Unicode.Ce que vous pouvez faire est de vérifier les plages de codes de caractères.
Ce qui suit est un peu plus détaillé, mais c'est pour faciliter la compréhension plutôt que pour le code de golf.
la source
Sur la base de la réponse de cletus, vous pouvez créer une nouvelle extension.
la source
Je conseille de ne pas dépendre du code prêt à l'emploi et intégré dans le framework .NET, essayez de proposer une nouvelle solution ... c'est ce que je fais.
la source
char.IsNumber()
méthode car c'est du code pré-construit?