Ответы:
Используйте следующее выражение:
^[a-zA-Z0-9]*$
то есть:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
В .NET 4.0 вы можете использовать LINQ:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.Allпрекратит выполнение и вернет отчеты falseв первый раз, так как тогда договор не может быть выполнен.char.IsLetterOrDigitfalseAll
Заметка! в этом ответе строго не проверяются буквенно-цифровые символы (обычно это AZ, az и 0-9). Этот ответ позволяет местным персонажам вроде åäö.
Обновление 2018-01-29
Приведенный выше синтаксис работает только при использовании одного метода с единственным аргументом правильного типа (в данном случае char).
Чтобы использовать несколько условий, вам нужно написать так:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
char.IsLetterOrDigit('ก')вернется true. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca
Вы могли бы легко сделать это с помощью функции расширения, а не регулярного выражения ...
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)));
}
char.IsLetterOrDigitвместо IsLetter + IsNumber
Хотя я думаю, что решение на основе регулярных выражений, вероятно, является тем путем, которым я бы пошел, я бы хотел инкапсулировать это в типе.
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, и знать, что если вы ее получите, она действительна (кроме нулей). Если кто-то попытается передать непроверенную строку, это вызовет ошибку компилятора.
Вы можете стать более интересным и реализовать все операторы равенства или явное приведение к AlphaNumericString из простой строки, если вам интересно.
static public implicit operator stringчасть
Мне нужно было проверить AZ, az, 0-9; без регулярного выражения (хотя OP запрашивает регулярное выражение).
Смешивая здесь различные ответы и комментарии, а также обсуждения из https://stackoverflow.com/a/9975693/292060 , это проверяет букву или цифру, избегая букв других языков и избегая других чисел, таких как символы дроби.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
^\w+$ позволит a-zA-Z0-9_
Используйте, ^[a-zA-Z0-9]+$чтобы запретить подчеркивание.
Обратите внимание, что оба из них требуют, чтобы строка не была пустой. Использование *вместо +разрешает пустые строки.
^[\w-]+$
Чтобы проверить, является ли строка комбинацией букв и цифр, вы можете переписать ответ @jgauffin следующим образом, используя .NET 4.0 и LINQ:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
Тот же ответ, что и здесь .
Если вам нужна A-z 0-9проверка ASCII без регулярного выражения , вы не можете использовать ее, так char.IsLetterOrDigit()как она включает другие символы Unicode.
Что вы можете сделать, так это проверить диапазоны кодов символов.
Следующее немного более подробное, но оно сделано для простоты понимания, а не для игры в гольф.
public static bool IsAsciiAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
{
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] < 48) // Numeric are 48 -> 57
{
return false;
}
if (str[i] > 57 && str[i] < 65) // Capitals are 65 -> 90
{
return false;
}
if (str[i] > 90 && str[i] < 97) // Lowers are 97 -> 122
{
return false;
}
if (str[i] > 122)
{
return false;
}
}
return true;
}
Основываясь на ответе cletus, вы можете создать новое расширение.
public static class StringExtensions
{
public static bool IsAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
Regex r = new Regex("^[a-zA-Z0-9]*$");
return r.IsMatch(str);
}
}
Я советую не зависеть от готового и встроенного кода в .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;
}
char.IsNumber()метод, поскольку это предварительно созданный код?