2015-10-17 3 views
1

Это должно быть легко, но это не так, для меня по крайней мере :(Как проверить каждое слово отдельно в Rails?

У меня есть подтверждение, как это:

validates :l_name, format: { with: /\b[A-Z][a-z]+\b/ } 

И моя цель состоит в том, чтобы проверить каждое слово данной строки Итак. если я установил свое имя l_name: «Cow Milk», он должен пройти, но когда я передаю: «коровье молоко» или «коровье молоко», я хочу, чтобы он возвращал ошибку. Но на данный момент проверка проходит до тех пор, пока существует хотя бы одно заглавное слово .

В консоли regex это выглядит неплохо.

ответ

0

^([A-Z][a-z]*)+([A-Z][a-z]*)*$

Объяснение

Первая часть ^([A-Z][a-z]*) гарантирует, что строка начинается ^ с заглавной словом [A-Z], где слово может быть также один капитализируются характер, так как [a-z]* означает 0 или больше из к г.

Вторая часть ([A-Z][a-z]*)*$ проверяет другие заглавные слова, разделенные пробелами ([. Но эти слова необязательны, обозначенные )*, что означает 0 или более таких слов. $ гарантирует, что все слова до конца строки будут заглавные. Например, без $ это также соответствует Cow milk in my coffee.

Наконец, + не требуется, так как он указывает 1 или более, но поскольку у нас может быть только одно заглавное слово в начале строки, оно нам не нужно. Так что это также будет работать ^([A-Z][a-z]*)([A-Z][a-z]*)*$.

+0

Мне пришлось изменить его на \ A ([AZ] [az] *) + ([AZ] [az] *) * \ z, но это регулярное выражение отлично работает thnx :) Я рассмотрю, если вы дадите объяснение:) – Kazik

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