Відповіді:
Використовуйте такий вираз:
^[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 з простого рядка ol ', якщо вам все одно.
static public implicit operator stringчастині
Мені потрібно було перевірити AZ, az, 0-9; без регулярного вираження (навіть якщо ОП просить повторно виразити).
Тут поєднуються різні відповіді та коментарі та обговорення з https://stackoverflow.com/a/9975693/292060 , це тести на букву чи цифру, уникаючи інших літер мови та уникаючи інших цифр, таких як символи дробу.
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
Щоб перевірити, чи рядок є комбінацією букв і цифр, ви можете переписати відповідь @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;
}
На основі відповіді клетуса ви можете створити нове розширення.
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 рамках, спробуйте підняти нове рішення .. це те, що я роблю ..
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().