Я уже делаю это на стороне сервера при загрузке страницы. Написал CFC Coldfusion, который передает ему два параметра - фактические данные пользователя (имя, отчество, фамилия) и тип данных (имя, отчество, фамилия). Затем проверяются дефисы, апострофы, пробелы и форматы соответственно. ех. Макдональд, МакМюррей, О'Нил, Родэм-Клинтон, Эрик фон Голландский, Дж. У. Буш, Джек Бертон-младший, доктор Пол Окин, Крис ди Сантос. В случае, когда пользователи имеют только одно имя, требуется только первое поле имени, отчество и фамилия необязательны.
Вся информация хранится в нижнем регистре - за исключением префикса, суффикса и пользовательского. Это форматирование выполняется при отображении страницы, а не во время сохранения в БД. Хотя при вводе данных пользователем существует фильтрация проверки. Извините, не могу опубликовать код. Начал использовать Regex, но стал слишком запутанным и ненадежным для всех сценариев. Используются стандартные логические блоки (if / else, switch / case), более удобные для чтения и отладки. СДЕЛАЙТЕ КАЖДЫЙ ВХОД / РАЗДЕЛИТЬ ПОЛЕ БД! Да, это займет некоторое кодирование, но после того, как вы закончите, оно должно составлять 99% комбинаций. Пока только на основе английских имен, без интернационализации, это еще один шарик воска.
Вот некоторые вещи, которые следует учитывать:
- Hypens (например, Родхам-Клинтон, может быть в первом, среднем или последнем)
- Апострофы (например, О'Нил, может быть первым, средним или последним)
- Пробелы
- Мак и Мак (например, Макдональд, МакМюррей, могут быть в первом, среднем или
последний)
- Имена: несколько имен (например, Джо Боб Бриггс)
- Фамилии: de, di, et, der, den, van, von, af должны быть строчными (бывший Эрик
фон Дандер, Мария ди Карло)
- Префикс: д-р, проф. И т. Д.
- Суффикс: младший, старший, эсквайр, II, III и т. Д.
Когда пользователь вводит информацию, схема поля в БД выглядит так:
- Префикс / Заголовок (Доктор и т. Д. С использованием раскрывающегося списка)
- Префикс / Название Пользовательский (пользователь может ввести пользовательский, например, Капитан, используя текст
поле)
- Имя
- Средний
- Фамилия
- Суффикс (младший, III, проф., Рет. И т. Д. С использованием раскрывающегося списка)
- Суффикс Пользовательский (пользователь может ввести пользовательский, например, CPA)
Вот то регулярное выражение, которое я использую, чтобы сделать первую букву каждого имени заглавной. Сначала я запускаю это, а затем следую формату процедур в соответствии с правилами (это в формате Coldfusion, но вы поняли):
<cfset var nameString = REReplace(LCase(nameString), "(^[[:alpha:]]|[[:blank:]][[:alpha:]])", "\U\1\E", "ALL")>
Вы также можете сделать это на стороне клиента, используя JavaScript и CSS - может быть, даже проще - но я предпочитаю делать на стороне сервера, так как мне нужны переменные, заданные до загрузки страницы на стороне клиента.