Как я могу проверить строку с помощью регулярных выражений, чтобы разрешить буквенно-цифровые символы?
(Я тоже не хочу допускать никаких пробелов).
Как я могу проверить строку с помощью регулярных выражений, чтобы разрешить буквенно-цифровые символы?
(Я тоже не хочу допускать никаких пробелов).
Используйте следующее выражение:
^[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
char.IsLetterOrDigit
поскольку тогда контракт All
не может быть выполнен.
Заметка! этот ответ не проверяет буквенно-цифровые символы (обычно это AZ, az и 0-9). Этот ответ позволяет локальным символам, таким как åäö
.
Обновление 2018-01-29
Синтаксис выше работает только тогда, когда вы используете единственный метод, который имеет один аргумент правильного типа (в данном случае char
).
Чтобы использовать несколько условий, вам нужно написать так:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
Вы можете сделать это легко с помощью функции расширения, а не регулярного выражения...
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)));
}
В то время как я думаю, что решение на основе регулярных выражений, вероятно, будет таким, каким я бы пошел, у меня возникнет соблазн инкапсулировать его в тип.
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 из простой строки.
Мне нужно было проверить A-Z, a-z, 0-9; без регулярного выражения (хотя OP запрашивает регулярное выражение).
Смешивание различных ответов и комментариев здесь и обсуждение fooobar.com/questions/67247/..., это тесты на букву или цифру, избегая других букв языка и избегая других чисел, таких как фракция символы.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
^\w+$
позволит a-zA-Z0-9_
Используйте ^[a-zA-Z0-9]+$
, чтобы запретить подчеркивание.
Обратите внимание, что для обоих из них требуется, чтобы строка не была пустой. Использование *
вместо +
позволяет пустые строки.
Чтобы проверить, является ли строка комбинацией букв и цифр, вы можете переписать @jgauffin answer следующим образом, используя .NET 4.0 и LINQ:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
Я советую не зависеть от готового и встроенного кода в .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;
}