Манипулировать строкой в ​​соответствии с шаблоном проверки - PullRequest
0 голосов
/ 07 марта 2011

У меня есть проверочный веб-сервис WCF, который позволяет мне проверять строки, почтовые индексы, электронные письма и т. Д. Он работает хорошо, возвращая ответ JSON.Однако я хотел бы сделать следующее:

  1. Попросить пользователя заполнить текстовое поле своей записью;
  2. Проверить ответ службой WCF;
  3. Покажите пользователю визуальную подсказку, что проверка прошла или не прошла;(пока я могу делать все это, используя Jquery и мой сервис WCF)
  4. Измените шаблон текстового поля, чтобы он соответствовал принятому шаблону.Например, если бы я ввел номер телефона: 01234 567890, он изменится (как на iphone) на мой определенный шаблон +44 (0) 1234 567890. Я бы хотел, чтобы это происходило в режиме реального времени, вживую, поэтому я знаюможет быть, какая-то форма работы Jquery - какие-нибудь идеи?

Помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Сложно не реализовать это в jquery, а найти алгоритм, который сделает ваше форматирование.

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

Для телефонных номеров это кажется простымпуть, потому что когда вы что-то пропускаете, это всегда в начале (международный код или код города).

В более общем смысле, сопоставление подвыражений желаемого формата в фактическом вводе будет работать до тех пор, покафактический ввод имеет только одну интерпретацию (если символ ввода может быть частью либо одного подвыражения, либо другого, то вам придется объяснить пользователю, почему ваш алгоритм иногда делает «неправильные» действия при расширении его ввода доВаш желаемый формат.

Сопоставление подвыражений может быть выполнено с помощью регулярных выражений в javascript, поэтому вам не нужно писать собственный сопоставитель выражений. Используйте группировку подвыражений, а затем объединяйте сопоставленные группы, используя конкатенацию строк, вставляя форматированиесимволы междусоответствующие группы по мере необходимости.

Вот небольшой пример того, что я имею в виду:

function format_phonenumber(unformatted) {
  var regex = /(\d{3})(\s*-?\s*)(\d{3})\s*(\d{4})/gi;
  var m = regex.exec(unformatted)
  return m[1] + "-" + m[3] + " " + m[4]; 
}

/* unformatted junk */
var junk = "5551234567";
alert("Formatted: " + format_phonenumber(junk));

Вы можете изменить мусор на "555 1234567" или 555-1234567 "и т. д., и группы соответствия будутпо-прежнему сопоставляйте правильные подвыражения и производите красиво отформатированный вывод «555-123 4567» (я не знаю, как вы форматируете свои телефонные номера, но вы поняли идею).Но все зависит от того, насколько умным является ваше подвыражение.Конечно, описанный выше модуль форматирования должен иметь отказоустойчивую систему, поэтому, если регулярное выражение не совпадает, вы получите исходную неформатированную строку вместо фактического фрагмента мусора.

Теперь, если вы дадитеПоле ввода в вопросе идентификатор, вы можете прикрепить к нему прослушиватель событий, который будет считывать данные в поле ввода, запускать их через ваш форматтер и сохранять их обратно в текстовое поле с помощью jquery следующим образом:

var unformatted = $("#myinputbox").val();
var formatted = format_phonenumber(unformatted);
$("#myinputbox").val(formatted);
0 голосов
/ 07 марта 2011

Плагин Masked Input для jQuery может стоить посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...