133 votes

Comment puis-je valider une chaîne pour autoriser uniquement les caractères alphanumériques?

Comment puis-je valider une chaîne à l'aide des Expressions Régulières pour autoriser uniquement les caractères alphanumériques?

(Je ne veux pas de permettre à tous les espaces).

239voto

jgauffin Points 51913

Dans .NET 4.0, vous pouvez utiliser LINQ:

if (yourText.All(char.IsLetterOrDigit))
{
    //just letters and digits.
}

197voto

cletus Points 276888

Utiliser l'expression:

^[a-zA-Z0-9]*$

c'est à dire:

Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
  ...
}

35voto

JP Alioto Points 33482

Vous pourriez le faire facilement avec une extension de fonction 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)));
}

17voto

kyoryu Points 8281

Alors que je pense que la regex basé solution est sans doute la façon dont j'allais, je serais tenté de saisir cette 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;
    }
}

Maintenant, quand vous avez besoin d'une validation de la chaîne, vous pouvez avoir la signature de la méthode nécessite une AlphaNumericString, et de savoir que si vous obtenez un, il est valable (à part les valeurs null). Si quelqu'un tente de passer dans un non-validé chaîne, il va générer une erreur du compilateur.

Vous pouvez obtenir de l'amateur et de mettre en œuvre tous les opérateurs d'égalité, ou un cast explicite AlphaNumericString de plain ol de la chaîne, si vous vous souciez.

8voto

goodeye Points 917

J'avais besoin de vérifier pour A-Z, a-z, 0-9; sans une regex (même si l'OP demande regex).

Mélange de diverses réponses et commentaires ici, et la discussion de http://stackoverflow.com/a/9975693/292060ce tests pour lettre ou un chiffre, en évitant les autres lettres de la langue, et en évitant les autres numéros, tels que les caractères de fraction.

if (!String.IsNullOrEmpty(testString)
    && testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
    // Alphanumeric.
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X