#javascript #php #html
Вопрос:
Я пытаюсь отформатировать текст ввода, разделив 48 чисел на блоки по 6 чисел, например:
00000000000000000000000000000000000000000000
становится
000000-000000-000000-000000-000000-000000-000000-000000
Эти номера возвращаются с ответом $после отправки формы с CURL.
По какой-то причине, когда результат возвращает его не в этом формате, мне нужно стереть номер и переписать его так, чтобы он был исправлен и в правильном формате.
Это код, который я использую:
JS
$(window).on("load",
function () {
$("#resID").on("change paste input", function (e) {
var t = this.value.replace(/D/g, "");
48 == t.length ? (this.value = t.match(new RegExp(".{1," t.length / 6 "}", "g")).join("-")) : (this.value = t)
});
});
HTML
<div class="response">
<?php if($response != ''){ ?>
<input type="search" class="form-control" id="resID" style="text-align: center;" value="<?php echo $response; ?>" data-clipboard-target="#resID" href="#" readonly>
<?php } ?>
</div>
Короче говоря, он правильно форматируется, но мне нужно обновить числа, удалив последнее и введя его снова.
Кто-нибудь знает, что может быть не так?
Комментарии:
1. Не используйте троичный вместо
if
оператора, это затрудняет чтение кода.2. Вместо значения следует использовать троичный, например
this.value = <condition> ? expression1 : expression2;
3. Есть ли причина, по которой вы не исправляете это в PHP?
4. Можете ли вы показать пример числа, которое вам нужно исправить в формате?
5. Тривиально делать и в PHP — просто нужна комбинация
str_split
иimplode
, 3v4l.org/icIBU
Ответ №1:
Это можно сделать в одну строку. Мы можем использовать String.prototype.match()
для разделения строки на массив сегментов из 6 символов и Array.prototype.join()
объединения этих частей вместе.
var value = '000000000000000000000000000000000000000000000000';
console.log(value.match(/.{1,6}/g).join("-"))
В вашем случае:
$(window).on('load', () => {
$("#resID").on("change paste input", function(e) {
this.value = this.value.match(/.{1,6}/g).join("-");
})
})
/* below for demonstration purposes only */
setTimeout(() => {
console.log('set value to 000000000000000000000000000000000000000000000000');
$('#resID').val('000000000000000000000000000000000000000000000000').trigger('change');
}, 1000);
input {
width: 415px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="search" class="form-control" id="resID" style="text-align: center;" value="" data-clipboard-target="#resID" href="#" readonly>
Комментарии:
1. Это действительно хороший ответ!
2. Похоже, проблема спрашивающего в том, что их код для форматирования строки находится внутри
$("#resID").on("change paste input", function (e) {
.3. краткий ответ нам нужно больше от вас на SO. @Spectric
4. @Джоундилл Спасибо за напоминание. Я обновил свой ответ 🙂
5. Эй, друзья, большое вам спасибо за помощь, мне удалось решить проблему с вашей помощью.
Ответ №2:
Используя подстроку в цикле for, вы можете использовать индекс для создания делимого раздела index, index 6
, затем поместить его в массив, чтобы получить части, которые можно соединить с помощью тире.
let string = "000000000000000000000000000000000000000000000000";
function addDashes(string) {
let strArr = []
for (let i = 0, len = string.length; i < len; i = 6) {
strArr.push(string.substring(i, i 6));
}
return strArr.join('-')
}
console.log(addDashes(string))
Комментарии:
1. Привет, друг, большое тебе спасибо за твою помощь.