Raja Ganapathy Ответов: 3

Как проверить только заглавные буквы и цифры, символы с помощью C#?


я хочу проверить значение таблицы данных.я получаю значение из таблицы данных с помощью строки и столбца и сохраняю его в одной переменной типа ' z ' теперь я хочу проверить только это содержание
*заглавная буква
*атрибутика
*номера

Что я уже пробовал:

if (z.Any(char.IsUpper) && z.Any(char.IsSymbol) && z.Any(char.IsDigit))
{
//statement
}
else



но это не работает. :(

3 Ответов

Рейтинг:
26

Karthik_Mahalingam

string text = "$Apple20";
       // to check all 3 cases
         if (text.Any(char.IsUpper) && text.Any(char.IsSymbol) && text.Any(char.IsDigit))
         {
            // text contains upper case, symbol and   number
         }

       // to check anyone contains
         if (text.Any(char.IsUpper) || text.Any(char.IsSymbol) || text.Any(char.IsDigit))
         {
             // text contains upper case or  symbol or   number
         }


Рейтинг:
15

Maciej Los

Я бы предложил использовать Регулярное выражение.Выполняется[^] метод вместе с Linq To DataSet[^].

Взгляните на пример:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("text", typeof(string)));
dt.Rows.Add(new object[]{"$LettersSignsAndNumbers20"});
dt.Rows.Add(new object[]{"OnlyLetters"});
dt.Rows.Add(new object[]{"$!&%^"});
dt.Rows.Add(new object[]{"2016"});
dt.Rows.Add(new object[]{"2016-09-09"});

var result = dt.AsEnumerable()
	.Select(x=> new
		{
			Text = x.Field<string>("text"),
			ContainsLetters = Regex.IsMatch(x.Field<string>("text"),"[a-zA-Z]{1,}"),
			ContainsNumbers = Regex.IsMatch(x.Field<string>("text"),"[0-9]{1,}"),
			ContainsSigns = Regex.IsMatch(x.Field<string>("text"),"[^a-zA-Z0-9]{1,}")
		})
	.ToList();
	
Console.WriteLine("Text\t|\tContainsLetters\t|\tContainsNumbers\t|\tContainsSigns");
foreach(var v in result)
{
	Console.WriteLine("{0}\t|\t{1}\t|\t{2}\t|\t{3}", v.Text, v.ContainsLetters, v.ContainsNumbers, v.ContainsSigns);
};


Результат:
Text                        ContainsLetters ContainsNumbers ContainsSigns
$LettersSignsAndNumbers20   True            True            True 
OnlyLetters                 True            False           False 
$!&%^                       False           False           True 
2016                        False           True            False 
2016-09-09                  False           True            True 


Для получения более подробной информации, пожалуйста, смотрите:
Язык Регулярных Выражений-Краткий Справочник[^]
Примеры LINQ to DataSet[^]


Raja Ganapathy

Спасибо

Maciej Los

Всегда пожалуйста.

BillWoodruff

+5 !

Maciej Los

- Спасибо, Билл.

Рейтинг:
10

Patrice T

Цитата:
я хочу проверить только это содержание
*заглавная буква
*атрибутика
*номера
Вы забыли сказать, хотите ли вы matvh 1 из 3 за один раз или смесь из 3.
if (z.Any(char.IsUpper) && z.Any(char.IsSymbol) && z.Any(char.IsDigit))

Это будет соответствовать if какой-то обуглившийся от z это заглавные буквы, а некоторые-символы, а некоторые-цифры.
Так "AnsAnything-99"будет соответствовать, потому что у вас есть по крайней мере 1 из каждого.

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

Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]