2013-04-06 9 views
1

Я получил строку, что мне нужно проверить на валидность, позже существо, если:.Net Regex для разделенных запятыми со строгим форматом

  • Это совершенно пустой
  • Или содержит запятая, которая ДОЛЖНА выглядеть так: 'abc, def, ghi, jkl'.

Не имеет значения, сколько из этих значений, разделенных запятой, есть, но если строка не пуста, она должна придерживаться формата запятой (и только запятой) без пробелов вокруг них и каждое значение может содержать только ascii az/Az .. никаких специальных символов или чего-либо еще.

Как бы проверить, придерживаются ли строки правил или нет?

ответ

8

Вы можете использовать это регулярное выражение

^([a-zA-Z]+(,[a-zA-Z]+)*)?$ 

или

^(?!,)(,?[a-zA-Z])*$ 

^ является начало строки

[a-zA-Z] класс символов, который соответствует одну заглавную или lowerca се алфавит

+ является квантификатором, который соответствует предыдущему символу или группы 1 во много раз

* является квантификатором, который соответствует предыдущему символу или группу 0 до много раз

? является квантификатором который соответствует предыдущему символу или группе 0 или 1 раз

является конец строки

+0

Я хотел бы +2 Вас за время, чтобы объяснить каждый из маркеров. :) –

+0

@ChrisSinclair thanks chris ... – Anirudha

+0

Woohoo - thanks -a lot- @The_Land_Of_Devils_SriLanka! Специально для великого, великого объяснения! –

1

Рассмотрим не с помощью регулярных выражений:

bool isOK = str == "" || str.Split(',').All(part => part != "" && part.All(c=> (c>= 'a' && c<='z') || (c>= 'A' && c<='Z')));

Смежные вопросы