2015-11-09 7 views
-1

У меня есть приложение ASP.NET MVC, содержащее поле формы, называемое «Имя/фамилия». Мне нужно добавить некоторую базовую проверку, чтобы люди вводили как минимум два слова. Для проверки длины слова и т. Д. Он не обязательно должен быть полностью исчерпывающим, мы, по сути, просто должны помешать людям входить только в свое имя, что и происходит в настоящее время. Я не хочу ограничивать только буквенные символы, поскольку некоторые имена включают пунктуацию. Я просто хочу, чтобы люди ввели по крайней мере два слова, разделенных пробелом.Regex, чтобы соответствовать более чем одному слову

У меня есть следующее регулярное выражение в настоящее время:

[RegularExpression(@"^((\b[a-zA-Z]{2,40}\b)\s*){2,}$", ErrorMessage = "Invalid first/last name")] 

Это работает в определенной степени (он проверяет 2-х слов), но это недействительным, если пунктуация вводится, который не то, что я ищу.

Может ли кто-нибудь предложить, как изменить вышеизложенное, так что не имеет значения, если в словах используется пунктуация? Я плохо разбираюсь в синтаксисе регулярных выражений, поэтому прошу здесь.

Спасибо.

+0

Почему нисходящий? Кислый виноград? – Dan

ответ

1

Вы хотите два слова, по крайней мере одно пространство между ними и за его пределами, чтобы разрешить все остальное (например, пунктуацию).Так держать это просто:

\w.*\s.*\w 

Или, если вы должны закрепить его начало и конец:

^.*\w.*\s.*\w.*$ 

Это будет соответствовать, например, D' Addario (но не D'Artagnan само по себе, так как он считает как одно слово по пространственному критерию).

+0

Будет ли это действительным для более чем двух слов? – Dan

+0

Да. Он ищет два слова и пробел где-то между ними, но принимает _anything_ else между ними или вокруг них, включая больше слов и пробелов. – alexis

+0

Это регулярное выражение позволяет начать строку с пробелов. –

0

Может быть просто:

@"\w\s\w" 

wordwhite spaceword

+0

Будет ли это действительным для более чем двух слов? – Dan

+0

Это не будет соответствовать «D. Кнут, например. – alexis

+1

Он не будет работать в атрибуте 'RegularExpression', так как он требует полного соответствия строк. –

0

Если вы просто хотите, чтобы последовательность не-пробельных символов, за которой следует 1 или более последовательностей пробельных символов следуют без пробельных символов, вы можете использовать

^\s*\S+(?:\s+\S+)+\s*$ 

См regex demo

Он не принимает только First или First.

Regex пробоя:

  • ^ - начало строки
  • \s* - ноль или более пробельные
  • \S+ - 1 или более не пробельные символы
  • (?:\s+\S+)+ - 1 или более последовательностей. ..
    • \s+ - 1 o г более пробельные последовательности (удалить + разрешить только один пробел между словами)
    • \S+ - 1 или более не пробельные символы
  • \s* - ноль или более пробельные
  • $ - конец строки
+0

Будет ли это иметь более 2 слов? – Dan

+0

Конечно, из-за кванта '+', что означает * 1 или ** больше ** вхождений *. Следуйте за демонстрационной ссылкой в ​​ответе, чтобы увидеть демонстрационную строку, содержащую несколько «слов», разделенных пробелом. Если вам нужно ограничить * 1 пробел * между словами, [удалить '+' после '\ s'] (https://regex101.com/r/kA5bF5/2). –

+0

'david o'connor' возвращает как недействительный, что нежелательно. – Dan

0

Привет вы можете использовать это регулярное выражение для проверки '^ [A-Za-Z0-9] + {1} [A-Za-Z0-9] + $''

Demo http://rubular.com/r/YN8eFa1yFE

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