Ответы:
Используйте следующее выражение:
^[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.IsLetterOrDigit
false
All
Заметка! в этом ответе строго не проверяются буквенно-цифровые символы (обычно это 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()
метод, поскольку это предварительно созданный код?