Как стать автором
Обновить

Комментарии 20

Хозяйке на заметку:
// adjust pattern to your needs
// $input needs to be UTF-8 encoded
if (preg_match('/^\p{L}+$/u', $input)) {
    // OK
} else {
    // not OK
}

\p{L} проверяет, выставлено ли у юникод-символа свойтво L («letter»).
Работает для всех языков безотносительно локали, главное кодировка utf-8
извините, забыл указать — (с)тырено у Stefan Gehrig со stackoverflow
спасибо, буду знать! =)
заметка очень полезная, про \p{L}, к сожалению, не знал
теперь при валидации умляутов на PHP «велосипед» применять не придеться
Спасибо, очень заинтересовало.
Думаю, купить такую будет очень кстати
Самый главный вопрос: а зачем там вообще проверка?
Даже не знаю что вам ответить, если не правильно понял вопрос, пожалуйста поправьте.
Чтоб в форму попадали данные того формата и того набора символов, которые положены.
Если вы про умляуты, то для того чтоб проверку прошли данные иностранцев с расширенным алфавитом латиницы
Зачем это проверять? Если кто-то захочет ввести хрень намеренно, то он это в любом случае сделает. Эта проверка в принципе не нужна.
От ботов и спамилок серверная проверка защитит, в какой-то мере.
А это как минимум чтоб если пользователь ввел ошибочную информацию сразу его оповестить, не отправляя данных на сервер, и тем самым не вынуждая пользователя ждать перезагрузки страницы.
Тем более на javascript можно фактически интерактивно подсказывать пользователю что и где не так.
Я просто пытаюсь сказать, что самое лучшее решение задачи — не решать ее. От ботов не защитит 100%. Уж там писатели озаботились о валидных именах. Ошибочная инфа… От опечаток не защитит. А лишние цифры, к примеру, и так заметны.
Я же говорю, не от ботов это. Пользователю комфортней, когда при опечатке страница не перезагрузится для проверки, а сразу подсветит что и где не так. По всему интернету частые опечатки соседствующих символов и букв наглядно демонстрируют необходимость предпроверки (например, грубо говоря, he;lo). Тем более, преимущественно, пользователи читают заметки по заполнению возле полей только когда что-то не получается, а не перед вводом информации.
Другое дело, что можно это реализовать на аяксе: без перезагрузки с проверкой на сервере. Но суть топика решение конкретной задачи по проверке на умляуты в javascript, а не обзор оптимальности валидации форм.
А почему не сделть проверку через [\w]?
Вы пробовали через \w?
У меня лично умляуты через \w не пропускало
Проверил, действительно не понимает.

Вообще, похоже с такими символами и у самих европейцев много мороки. Видел уже дважды в чужом коде функции по очистке символов от акцентов и умляутов.
Я тоже встречал по очистке, но задание поставили именно пропускать, а не очищать и пришлось призадуматься.
Сразу в голову пришло, что все таки кто-то делал (особенно в тех странах, где используются данные символы), но в итоге ничего кроме примеров очистки не нашел и решил придумать выход сам.
Вообще-то выражение /[A-Za-z]+/ и русские буквы не пропускает. Смысл проверки немного не понимаю. Т.е. немцы могут вводить имена в национальной раскладке, а остальные нет? Пусть уж все тогда вводят только английские символы. Поясните.
Задание дали пропускать расширенную латиницу. Заказчик — американцы. Я с вами согласен, что или все обычной латиницей или каждый на своем, но не я заказываю музыку на проекте.
А опубликовал я просто решение для умляутов, если кто-то еще столкнется. Добавить кириллицу в регулярное выражение труда не составит.
А вот вам ещё латинских букв с диакритическими знаками — ăąčīıřšőűů. Применяются в Восточной Европе (ı, так-то, в Турции, но тоже рядом).
Я придумал такой способ, основанный на сравнении букв в разных регистрах.
Подходит для европейских языков.
function valid_alpha_str(str) {
  var c, res = '';
  for (var i = 0; i < str.length; i++) {
    c = str.charAt(i);
    if (c === ' ' || c.toLocaleUpperCase() !== c.toLocaleLowerCase()) {
      res += c;
    }
  }
  return res === str;
}


* This source code was highlighted with Source Code Highlighter.

value = value.replace(/[^a-zA-Z0-9_ÄäÖöÜüß]/, '');

заменить все символы которые не входят в этот диапазон(латиница и цифры) "". ЭМУЛЯТЫ в списке не трогаем и оставляем на месте
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации