Regex для имени, улицы, города и т. Д. - PullRequest
0 голосов
/ 27 октября 2018

Я программирую веб-приложение с asp.net mvc и c #. В форме пользователь должен ввести имя, название улицы и город в разных полях.

  1. Начало: Введенное значение должно начинаться с «буквенного» символа (независимо от того, является ли язык английским, китайским или французским или что-то еще. Поэтому такие вещи, как é и китайские символы и т. Д. хорошо, но символы типа * ¥ @ # 1 и т. д. не допускаются)
  2. Середина: То же, что я сказал вначале и пробелы (но не два пробела после друг друга).
  3. Конец: Это то, что я сказал для начала.

Это правильно:

  • A b c

  • Abcd ef

  • ABCDEF

Это не правильно:

  • 1abc

  • A1 bc

  • 1 2 3

  • a b c (пробел в начале)

Вопрос:

  • Какое регулярное выражение для этого?

  • Как установить длину?

  • Во втором случае я хочу разрешить и номера 0123456789 (например, символы)

Вот что у меня есть: '^ [a-zA-Z] [a-zA-Z] [a-zA-Z] $'

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Вы хотите проверить строки, которые содержат только буквенные слова, разделенные одним пробелом между ними.

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

^\p{L}+(?: \p{L}+)*$

Или, если разрешен любой пробел:

^\p{L}+(?:\s\p{L}+)*$

См. Демонстрационную версию regex

Чтобы сопоставить только строки из 3 или более символов, используйте

^(?=.{3})\p{L}+(?:\s\p{L}+)*$
 ^^^^^^^^

Подробности

  • ^ - начало строки
  • (?=.{3}) = положительный прогноз, требующий любые 3 символа сразу после начала строки
  • \p{L}+ - 1 или более любых букв Unicode
  • (?:\s\p{L}+)* - ноль или более повторений
    • \s - любые пробелы
    • \p{L}+ - 1или больше любых символов Unicode
  • $ - конец строки

Обратите внимание, что если вам нужно использовать его в ASP.NET, используйте только это регулярное выражениедля проверки на стороне server , как на стороне клиента, этот шаблон может быть неправильно обработан с помощью регулярного выражения JavaScript.

0 голосов
/ 27 октября 2018

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

^(?:\p{L}+ )*\p{L}+$

\p{L} соответствует всем кодовым точкам Юникода, которые находятся в категории «Буквы».

Регулярное выражение соответствует 0 или более из \p{L}+ (одна или несколько букв плюс пробел) и затем обеспечивает наличие хотя бы одной или нескольких букв.

Демонстрация

Пример кода:

Console.WriteLine(Regex.IsMatch("abc def", @"^(?:\p{L}+ )*\p{L}+$"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...