Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / HTML, JavaScript, VBScript, CSS Новый топик    Ответить
 Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
Привет всем !

Вроде не новичок в программировании, а вот в эти регулярные выражения въехать никак не удается :(
Надо решить простую (наверное) задачу - проверка правильности ввода фамилии.
Правила такие:
1. Только кириллица
2. Фамилия может состоять из одного слова или из двух, разделенных "-" (тире)
3. Первая буква каждого слова - заглавная, остальные - строчные

Подскажите бестолковому как это сделать

Спасибо за любую помощь, советы, ссылки
2 ноя 20, 15:18    [22224973]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
fkthat
Member

Откуда:
Сообщений: 3921
"^[А-Я][а-я]*(-[А-Я][а-я]*)?$"

Это, если фамилии из одной буквы допустимы (я когда-то работал с одним таким парнем, он кореец).
2 ноя 20, 15:25    [22224981]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
Вот выражение, подсмотренное в инете:
var regExp = /^[А-ЯЁ][а-яё]*([-][А-ЯЁ][а-яё]*)?\s[А-ЯЁ][а-яё]*\s[А-ЯЁ][а-яё]*$/

Но так проверяется 3 слова: фамилия, имя, отчество. И работает как надо.

Но надо только фамилию или имя или отчество - все в отдельных input

Попробовал так:
  var regExpFam = /^[А-ЯЁ][а-яё]*([-][А-ЯЁ][а-яё]*)$/

Но не работает - все гонит в ошибку (Иванов, Иванов-Крамской и т.д.)
:(

Где косяк ?
2 ноя 20, 15:43    [22225010]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
fkthat
Member

Откуда:
Сообщений: 3921
MsGuns
Где косяк ?

Ты то что я написал смотрел-то? А у тебя не хватает "?" перед "$". А вот про Ё я и впрямь не подумал. Имел с этим когда-то личные проблемы, потому что у меня фамилия с "ё" - жил не тужил, и тут неожиданно выяснилось, что у меня тотально во всех документах (СНИЛС, ИНН и т.д.) стоит "е", а в паспорте "ё", пришлось все переделывать.

Сообщение было отредактировано: 2 ноя 20, 15:51
2 ноя 20, 15:51    [22225028]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
автор
"^[А-Я][а-я]*(-[А-Я][а-я]*)?$"


Добавил Ёё и все заработало. Спасибо большое :)
2 ноя 20, 15:52    [22225032]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
А как проверить любой текст кириллицей ?

Такое вот :
/^[А-ЯЁа-яё]*$/

работает, но только если одно слово.

А может быть любое кол-во слов без проверки регистра плюс символы , ; . ? ! <пробел> - и т.д.

Попробовал так:
/^[А-ЯЁа-яё,;.?! -]*$/


Не работает :(
2 ноя 20, 16:07    [22225047]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
fkthat
Member

Откуда:
Сообщений: 3921
MsGuns
Не работает :(

/^[А-ЯЁа-яё\W]*$/.test("А как проверить любой текст кириллицей ?")
2 ноя 20, 16:27    [22225066]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
автор
/^[А-ЯЁа-яё\W]*$/.test("А как проверить любой текст кириллицей ?")


Пропускает все спецсимволы (@#$%^&*), но, наверное, это правильно :)

А можно все-таки без них ?
2 ноя 20, 16:40    [22225074]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
fkthat
Member

Откуда:
Сообщений: 3921
MsGuns
А можно все-таки без них ?

Можно, конечно, только тогда тебе придется все "хорошие" символы явно руками перечислить xtht [....] - не забудь только whitespace добавить ('\s') и символы, которые используются в самих regexp как специальные (например '*', '?', скобки, точка и т.п.) заескейпить с помощью бекслеша '\'.
2 ноя 20, 17:12    [22225121]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
Вот это
автор
/^[A-Za-z\W]*$/

пропускает и кириллицу. Почему ?
2 ноя 20, 17:18    [22225131]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
автор
Можно, конечно, только тогда тебе придется все "хорошие" символы явно руками перечислить xtht [....] - не забудь только whitespace добавить ('\s') и символы, которые используются в самих regexp как специальные (например '*', '?', скобки, точка и т.п.) заескейпить с помощью бекслеша '\'.


Да ну его в пень :)
И так сойдет, я думаю. Чел же видит что набирает, не ?
2 ноя 20, 17:20    [22225137]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
Алексей Роза 2020
Member [заблокирован]

Откуда:
Сообщений: 247
MsGuns
Привет всем !

Вроде не новичок в программировании, а вот в эти регулярные выражения въехать никак не удается :(
Надо решить простую (наверное) задачу - проверка правильности ввода фамилии.
Правила такие:
1. Только кириллица
2. Фамилия может состоять из одного слова или из двух, разделенных "-" (тире)
3. Первая буква каждого слова - заглавная, остальные - строчные

Подскажите бестолковому как это сделать

Спасибо за любую помощь, советы, ссылки

Джеффри Фридл "регулярные выражения" - лучшая.

Не надо так заморачиваться. Фамилии может и не быть, может быть только имя.
Заглавных букв может не быть или могут быть все заглавные.
Заглавные буквы расставляете сами в начале каждого слова, предварительно сделав всех маленькими.
/^[-а-яА-Я ]{2,99}$/iu

как-то так
2 ноя 20, 18:42    [22225210]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
Спасибо за ссылку.
Книжку скачал. Уже читаю :)

А как на счет фильтра для латиницы ?

Сообщение было отредактировано: 2 ноя 20, 19:03
2 ноя 20, 19:03    [22225232]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
Алексей Роза 2020
Member [заблокирован]

Откуда:
Сообщений: 247
MsGuns
А как на счет фильтра для латиницы ?

это лишнее в большинстве случаев
если клиент напишет Golubev, он уже не клиент чтоли?
Или если у него на телефоне кириллица глючит, ему теперь идти в другой магазин?
отсеять латиницу можно так: [^a-zA-Z]
2 ноя 20, 19:37    [22225251]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
MsGuns
Member

Откуда: г.Чернигов
Сообщений: 113
автор
отсеять латиницу можно так: [^a-zA-Z]


Мне нужно обратное. Но если "отсеять" кириллицу, то проходят цифры.
2 ноя 20, 19:48    [22225255]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
fkthat
Member

Откуда:
Сообщений: 3921
MsGuns
Вот это
автор
/^[A-Za-z\W]*$/

пропускает и кириллицу. Почему ?

Потому что "\W" это все кроме всех латинских букв, цифр и подчеркивания, ergo, в том числе и кирилица)
2 ноя 20, 19:52    [22225257]     Ответить | Цитировать Сообщить модератору
 Re: Проверка фамилии с помощью регулярного выражения  [new]
Алексей Роза 2020
Member [заблокирован]

Откуда:
Сообщений: 247
MsGuns
автор
отсеять латиницу можно так: [^a-zA-Z]


Мне нужно обратное. Но если "отсеять" кириллицу, то проходят цифры.

MsGuns
автор
отсеять латиницу можно так: [^a-zA-Z]


Мне нужно обратное. Но если "отсеять" кириллицу, то проходят цифры.

как обратное? отсеять латиницу надо или что?
для цифр добавить 0-9 перед ]
2 ноя 20, 23:19    [22225362]     Ответить | Цитировать Сообщить модератору
Все форумы / HTML, JavaScript, VBScript, CSS Ответить