Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как можно оформить регулярное выражение (4 разряда 3 3 3 ...)) (https://javascript.ru/forum/misc/76755-kak-mozhno-oformit-regulyarnoe-vyrazhenie-4-razryada-3-3-3-a.html)

alex-romanov 10.02.2019 19:02

Как можно оформить регулярное выражение (4 разряда 3 3 3 ...))
 
0000 000 000 000 : 13
0000 000 000 000 00 : 15
0000 000 000 000 000 : 16
0000 000 000 000 000 00 : 18
0000 000 000 000 000 000 : 19


Как в зависимости от длины, задать вот такую маску ?

Вот пример кода, на основе которого это пытаюсь сделать.

<br />

    <h2>Кредитная карта </h2>
    <div>
        <input class="creditCardInput2" value="" placeholder="Введите номер кредитной карты" size="65" />
    </div>


function validateRealTimeCreditCardNumber(selector) {
 
    //var events = ['input', 'change', 'blur', 'keyup'];
 
    var events = "input change blur keyup";
    var lengthCreditCardNumber = 19;
 
    var reg = /[^\d]/g; /*все кроме цифр*/
 
    var regGroupDigit = /[\d]{1,4}/g;
    var cardCode;
 
    /*цикл */
 
     $(selector).each(function () {
        $(selector).on(events, function () {
 
            /*удаляются все символы, кроме цифр, а также любые символы, после достижения указанного предела*/
            var cardCode = this.value.replace(reg, '').substring(0, lengthCreditCardNumber);
 
            /*текущее значение из поля ввода, форматируется согласно регулярному выражению,
            в данном случае ищются символы от 1 до 4 и после такой группы символов, ставится пробел*/
            
           if(cardCode !== ''){
              cardCode.match(regGroupDigit).join(" ");
            }else{

              cardCode = '';
            }

 
            this.value = cardCode;/*записываев в поле ввода, проверенный символ (если он там есть)*/
        });
    });

Malleys 10.02.2019 19:27

Вы имеете в виду, что есть код и его нужно отформатировать.

var re = /(?!^\d{4})(\d{3})(?=(?:\d{1,3})+$)/g;

alert("1234567890123456789".replace(re, "$1 "));


Т. е. если у вас есть строка s, то в отформатированном виде она будет равна s.replace(re, "$1 "), где re является регулярным выражением из примера выше.

Пример целиком...
<input class="creditCardInput2" placeholder="Введите номер кредитной карты" required autocomplete="cc-number">

<script>
function validateRealTimeCreditCardNumber(selector) {
	document.addEventListener("input", function(event) {
		var target = event.target;
		if(target.matches(selector)) {
			target.value = target.value
				.replace(/[^\d]/g, "")
				.replace(/^(.{19}).*$/g, "$1")
				.replace(/(?!^\d{4})(\d{3})(?=(?:\d{1,3})+$)/g, "$1 ");
		}
	});
}

validateRealTimeCreditCardNumber("[autocomplete=cc-number]");

</script>


Используйте автозаполнение номера кредитной карточки, чтобы пользователям меньше вводить!

рони 10.02.2019 20:00

:)
<script>

var re = /((^\d)?\d{1,3})/g; 
document.write(
    [
        "1234567890123".match(re).join(" "),
        "123456789012345".match(re).join(" "),
        "1234567890123456".match(re).join(" "),
        "123456789012345678".match(re).join(" "),
        "1234567890123456789".match(re).join(" ")
    ].join("<br>")
);

</script>

alex-romanov 11.02.2019 21:32

то что нужно, спасибо


Часовой пояс GMT +3, время: 07:14.