#javascript #html #regex #string
#javascript #HTML #регулярное выражение #строка
Вопрос:
У меня есть форма, которая должна быть реализована с помощью javascript:
var birthdayForm = '<form id="birthday_signup" class="klaviyo_gdpr_embed_Wh3QTB" style="margin-top: 40px;" action="//manage.kmail-lists.com/subscriptions/subscribe" data-ajax-submit="//manage.kmail-lists.com/ajax/subscriptions/subscribe" method="GET" target="_blank" novalidate="novalidate">'
'<input type="hidden" name="g" value="Wh3QTB">'
'<input type="hidden" name="$fields" value="Birthday">'
'<input type="hidden" type="text" name="Birthday" id="final_birthday">'
'<div class="klaviyo_field_group">'
'<h2>Vertel ons jouw verjaardag en we zorgen voor een leuke verrassing!</h2>'
'<input class="" style="display:none;" type="email" value="" name="email" id="k_id_email" placeholder="Your email" />'
'<div class="klaviyo_field_group klaviyo_form_actions">'
'<div class="klaviyo_field_group" style="margin: 10px 0;">'
'<input id="klaviyo_form_Birthday" oninput="this.value = this.value.replace(/[^0-9/.]/g, '').replace(/(..*)./g, '$1');" placeholder="dd/mm/yyyy" maxlength="10" type="text" />'
'<button type="submit" class="klaviyo_submit_button btn" style="margin-left: 15px;">Versturen</button>'
'</div>'
'</div>'
'</div>'
'<div class="klaviyo_messages">'
'<div class="success_message" style="display:none;">'
'<p class="thank_you">Bedankt om jouw verjaardag te delen!</p>'
'</div>'
'<div class="error_message" style="display:none;"></div>'
'</div>'
'<div class="klaviyo_form_actions" style="margin: 10px 0;">'
''
'</div>'
'</form>';
Как вы можете видеть, следующее регулярное выражение выполняется при «oninput»:
oninput="this.value = this.value.replace(/[^0-9/.]/g, '').replace(/(..*)./g, '$1');"
К сожалению, это прерывается. Вероятно, оно неправильно экранируется. Я не понимаю, как именно. Кто-нибудь может мне помочь?
Комментарии:
1. можете ли вы привести пример ввода, с которым вы хотите заставить регулярное выражение работать, и почему вы хотите внести изменения во ввод
2. Обновленный ответ: jsfiddle.net/3xyw5g6z . Изменение oninput связано с тем, что я хочу помочь клиентам вводить свой день рождения в правильном формате. По разным причинам мы не можем использовать type=data, поэтому вместо этого я выбрал type=text .
Ответ №1:
Почему бы не использовать type=date
? Это позволило бы достичь ваших целей гораздо более простым способом.
Пожалуйста, проверьте мои изменения здесь: https://jsfiddle.net/v8cwuq69/3 /
У меня есть:
- изменен тип ввода на
date
- убрал
oninput
функцию, я думаю, в этом больше нет необходимости - добавлено
required
логическое свойство кinput
элементу, причина: документ - Я удалил ваш
novalidate
в вашемform
узле, хотя и не уверен, зачем вы это добавили
P.S. Я настоятельно рекомендую писать HTML-код не на JavaScript, а на HTML. Его гораздо проще поддерживать, форматировать и отлаживать.
Комментарии:
1. Спасибо за помощь, но я обязан использовать тип ввода текст вместо даты. Итак, остается главный вопрос: как я могу убедиться, что регулярное выражение выводится правильно внутри строки javascript. Я знаю, что лучше не писать html-код внутри Javascript, но Shopify Checkout допускает только javascript.