Comment valider une chaîne en utilisant des expressions régulières pour n'autoriser que des caractères alphanumériques?
(Je ne veux pas permettre d'espaces non plus).
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:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
s'arrêtera et retournera false
la première fois char.IsLetterOrDigit
rapports false
puisque le contrat de All
ne peut être rempli.
Remarque! cette réponse ne vérifie pas strictement les caractères alphanumériques (qui sont typiquement A à Z, a à z et 0 à 9). Cette réponse permet aux caractères locaux comme åäö
.
Mise à jour 2018-01-29
La syntaxe ci-dessus ne fonctionne que lorsque vous utilisez une seule méthode ayant un seul argument du type correct (dans ce cas, char
).
Pour utiliser plusieurs conditions, vous devez écrire comme ceci:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
Vous pouvez le faire facilement avec une fonction d’extension plutôt qu’une regex ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
for (int i = 0; i < str.Length; i++)
{
if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
return false;
}
return true;
}
Par commentaire :) ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}
Bien que je pense que la solution basée sur les expressions rationnelles soit probablement la solution que je choisirais, je serais tenté de résumer cela dans un type.
public class AlphaNumericString
{
public AlphaNumericString(string s)
{
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(s))
{
value = s;
}
else
{
throw new ArgumentException("Only alphanumeric characters may be used");
}
}
private string value;
static public implicit operator string(AlphaNumericString s)
{
return s.value;
}
}
Désormais, lorsque vous avez besoin d’une chaîne validée, vous pouvez demander à la signature de la méthode d’exiger un AlphaNumericString et de savoir que si vous en obtenez une, elle est valide (à l’exception de la valeur null). Si quelqu'un tente de passer une chaîne non validée, une erreur de compilation sera générée.
Vous pouvez obtenir plus sophistiqué et implémenter tous les opérateurs d'égalité, ou un transtypage explicite en AlphaNumericString à partir de la chaîne plain ol ', si vous y tenez.
Je devais vérifier pour A-Z, a-z, 0-9; sans regex (même si le PO demande une regex).
En mélangeant diverses réponses et commentaires ici, et une discussion de https://stackoverflow.com/a/9975693/29206 , cela teste la lettre ou le chiffre, en évitant les lettres de langage et les nombres tels que fraction personnages.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
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 à l'aide de .NET 4.0 et LINQ:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
^\w+$
permettra a-zA-Z0-9_
Utilisation ^[a-zA-Z0-9]+$
pour interdire le soulignement.
Notez que les deux nécessitent que la chaîne ne soit pas vide. En utilisant *
au lieu de +
permet les chaînes vides.