Является ли использование множественных замен в JS-функции «хорошей практикой»? - PullRequest
1 голос
/ 07 декабря 2011

У меня есть область моего сайта, которая позволяет пользователю вводить пользовательский URL.Правила URL-адреса заключаются в том, что он должен быть буквенно-цифровым, за исключением символа дефиса.Если используется дефис, он не может быть последовательным и не может начинать (или заканчивать) строку.

Я использую следующую функцию для достижения этой цели:

$('.url').bind("change keyup blur", function() {
     var url = $(this);

     url.val( url.val().replace(/[^A-z0-9-]/gi,'').replace(/-{2}/g,'-').replace(/^-/g,'') );
});

Функция работает хорошо, но яМне интересно, если это хорошая практика или возможно объединить правила в одном операторе замены.

Если используются последовательные дефисы (-), дефис заменяет его, так что я думаю, что требуется по крайней мере 2 оператора замены.

РЕДАКТИРОВАТЬ

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

Я думаю, что подсказки кода или подсказки помогают, но это не вопрос «как мне сократить этот код».

Ответы [ 4 ]

4 голосов
/ 07 декабря 2011

Нет ничего плохого в том, чтобы использовать более одной функции замены.Фактически, самые быстрые реализации совместимости trim используют несколько операторов замены, потому что быстрее иметь два отдельных регулярных выражения для поиска в начале и конце строк, чем объединенное выражение, которое делает оба.

Если вы не беспокоитесь о производительности, однако, вы могли бы комбинировать выражения, используя |, с небольшими изменениями, чтобы использовать позитивный прогноз вместо предложения Даниэля -{2,}:

url.val().replace(/[^A-Z0-9-]|-(?:-)|^-|-$/gi, '')
3 голосов
/ 07 декабря 2011

Я думаю, что вы делаете это достаточно справедливо. Регулярные выражения имеют тенденцию становиться трудными для понимания довольно быстро. У них тоже есть склонность ошибаться:)

Однако я хотел бы разбить процедуру замены на отдельную функцию.

1 голос
/ 07 декабря 2011

Можно сказать, заменить 2 или более дефисов.

.replace(/-{2,}/g,'-')
//           ^ notice the comma
0 голосов
/ 07 декабря 2011

вероятно, одно регулярное выражение будет "очень немного" быстрее, но с коротким текстом и тремя простыми шаблонами, как сейчас, это уже достаточно быстро.

для меня не проблема

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