Как я могу проверить строку, чтобы только буквенно-цифровые символы в ней?

Как я могу проверить строку с помощью регулярных выражений, чтобы разрешить буквенно-цифровые символы?

(Я тоже не хочу допускать никаких пробелов).

Ответ 1

Используйте следующее выражение:

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

то есть:

using System.Text.RegularExpressions;

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

Ответ 2

В .NET 4.0 вы можете использовать LINQ:

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

yourText.All остановит выполнение и вернет false в первый раз, когда char.IsLetterOrDigit сообщает о false char.IsLetterOrDigit поскольку тогда контракт All не может быть выполнен.

Заметка! этот ответ не проверяет буквенно-цифровые символы (обычно это AZ, az и 0-9). Этот ответ позволяет локальным символам, таким как åäö.

Обновление 2018-01-29

Синтаксис выше работает только тогда, когда вы используете единственный метод, который имеет один аргумент правильного типа (в данном случае char).

Чтобы использовать несколько условий, вам нужно написать так:

if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}

Ответ 3

Вы можете сделать это легко с помощью функции расширения, а не регулярного выражения...

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;
}

За комментарий:)...

public static bool IsAlphaNum(this string str)
{
    if (string.IsNullOrEmpty(str))
        return false;

    return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}

Ответ 4

В то время как я думаю, что решение на основе регулярных выражений, вероятно, будет таким, каким я бы пошел, у меня возникнет соблазн инкапсулировать его в тип.

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;
    }
}

Теперь, когда вам нужна проверенная строка, вы можете иметь подпись метода, требующую AlphaNumericString, и знать, что если вы ее получите, она действительна (кроме нулей). Если кто-то попытается пройти в неаудированной строке, он сгенерирует ошибку компилятора.

Если вам интересно, вы можете получить fancier и реализовать все операторы равенства или явное приведение в AlphaNumericString из простой строки.

Ответ 5

Мне нужно было проверить A-Z, a-z, 0-9; без регулярного выражения (хотя OP запрашивает регулярное выражение).

Смешивание различных ответов и комментариев здесь и обсуждение fooobar.com/questions/67247/..., это тесты на букву или цифру, избегая других букв языка и избегая других чисел, таких как фракция символы.

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

Ответ 6

^\w+$ позволит a-zA-Z0-9_

Используйте ^[a-zA-Z0-9]+$, чтобы запретить подчеркивание.

Обратите внимание, что для обоих из них требуется, чтобы строка не была пустой. Использование * вместо + позволяет пустые строки.

Ответ 7

Чтобы проверить, является ли строка комбинацией букв и цифр, вы можете переписать @jgauffin answer следующим образом, используя .NET 4.0 и LINQ:

if(!string.IsNullOrWhiteSpace(yourText) && 
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
   // do something here
}

Ответ 8

Я советую не зависеть от готового и встроенного кода в .NET framework, попытайтесь поднять новое решение.. это то, что я делаю..

public  bool isAlphaNumeric(string N)
{
    bool YesNumeric = false;
    bool YesAlpha = false;
    bool BothStatus = false;


    for (int i = 0; i < N.Length; i++)
    {
        if (char.IsLetter(N[i]) )
            YesAlpha=true;

        if (char.IsNumber(N[i]))
            YesNumeric = true;
    }

    if (YesAlpha==true && YesNumeric==true)
    {
        BothStatus = true;
    }
    else
    {
        BothStatus = false;
    }
    return BothStatus;
}