Подскажите код, который бы искал все даты типа XX.XX.XXXX и заменял их чем-то
Имею textarea, куда вставляю некоторый HTML-код.
jQuery должен в этом тексте найти все фрагменты определенного формата, например, 30.07.2017, и заменить их на, скажем, <div class="vrotego">31.07.2017</div> Как попросить jQuery найти все однотипные выражения, состоящие из двух цифр точки еще двух цифр точки и четырех цифр? Спасибо. |
Stenli,
reg = /\d{2}\.\d{2}\.\d{4}/g; str = " 30.07.2017 30.07.2017" str = str.replace(reg, '<div class="vrotego">$&</div>'); alert(str) |
А если беда такая, что заменить нужно на
<?=date('+'d.m.Y'+', strtotime('+'0 day'+'));?> Я бы сразу так спросил, но совсем не мог подумать, что на выходе в другом textarea у меня вот это <? будет заменяться на вот это <!--? |
Stenli,
не понимаю |
^) что же я сегодня такой загадочный...
Давайте по-другому: Мне нужно, чтобы все даты вида xx.xx.xxxx заменялись на <?=date('+'d.m.Y'+', strtotime('+'0 day'+'));?> То есть все как в первом сообщении. Ваша подсказка работает, только в результате у меня меняется на <!--?=date('+'d.m.Y'+', strtotime('+'0 day'+'));?--> Добавляются знаки закомментировывания <!-- --> [IMG SRC=http://f6.s.qip.ru/~6wVwQIbF.png] |
Цитата:
|
Безусловно. Грешу на свои пальцы из ушей и мозги из пяток.
Тыкал тыкал и понял, что такая подстанова происходит, когда jQuery видит комбинацию "<?". Он решает ее САМ заменить на "<!--?". Если я знак вопроса первый уберу, то все ставится как надо, не меняется. Как сделать, чтобы не появлялись знаки комментариев? |
Jquery тоже не в чем не виноват
<!DOCTYPE HTML> <head> </head> <body> <div>1<?=date('+'d.m.Y'+', strtotime('+'0 day'+'));?></div> <div>2<?=date('+'d.m.Y'+', strtotime('+'0 day'+'));?></div> </body> </html> посмотрите код и результат, это браузер виноват!! мы с вами нашли виноватого! |
Это очень и очень странно.
Потому что я пробовал подставить < > но браузер выдал их в таком же неизменном виде. Кстати, как вы делаете кнопку "Просмотреть"? Чтобы код можно было сразу запустить из сообщения? Вот, попробуйте с нижепоказанным кодом ввести любую дату формата ДД.ММ.ГГГГ. Получится на выходе <!--?=date(d.m.Y, strtotime(0 day));?--> Как победить, ума не приложу. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="assets/css/bootstrap/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="assets/css/main.css"> <script type="text/javascript" src="assets/js/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script type="text/javascript" src="assets/js/bootstrap.min.js"></script> <script type="text/javascript" src="assets/js/preland.js"></script> <title>Preland convert</title> </head> <body> <div class="container"> <div class="row"> <div class="text-center" style="margin-top: 20px;"> <button type="button" name="sendTo" value="Send to" id="sendTo" class="btn btn-success">Адаптировать</button> </div> <div class="text-center" style="font-size: 12px; margin: 10px;">Каждый новый текст требует обновления страницы (F5 на клавиатуре или кнопка обновить <span class="glyphicon glyphicon-repeat"></span>)</div> <hr /> <div class="col-lg-12"> <label>Введите html-текст, который нужно адаптировать (правая кнопка мыши + вставить или Ctrl+V)</label> <textarea class="form-control" name="insertArea" id="insertArea" cols="80" rows="10"></textarea> </div> <div class="col-lg-12" style="margin-top: 10px;"> <label>Скопируйте/вырежьте адаптированный html-текст (правая кнопка мыши + копировать или Ctrl+C/X)</label> <textarea class="form-control" name="pastArea" id="pastArea" cols="80" rows="10"></textarea> </div> <br> </div> </div> </body> </html> $(document).ready(function() { var Final = ''; $('#sendTo').on('click', function () { var insertData = $('#insertArea').val(); var bodyVal = $("<body>", {html : insertData}); var div = $("<div>", {html : insertData}); // replace dates var reg = /\d{2}\.\d{2}\.\d{4}/g; $(div).html(function (a,h) { return h.replace(reg, '<?=date('+'d.m.Y'+', strtotime('+'0 day'+'));?>'); }); // display result Final += "@include('layers.header') <body> " + div.html() + " @include('layers.footer')"; $('#pastArea').val(Final); }); }); |
j0hnik,
Stenli, Вы что хрень несете, какие <?=date('+'d.m.Y'+', strtotime('+'0 day'+'));?> могут быть на клиенте? |
Ну, приехали... никто не говорит, что это на клиенте. Это должно быть в коде, который я прогоняю через textarea.
У меня есть несколько страниц, в каждой куча дат. Я их не хочу руками менять и не хочу к каждой странице подключать лишний скрипт. Лучше я сделаю свою форму, через которую буду прогонять HTML-код этих страниц, где вместо дат вставлять этот PHP-кусок. А потом уже, когда клиент будет заходить на страницу, ему будет показана обновленная дата. -- Короче говоря, к делу это не относится. Рони все правильно подсказал, как даты заменить на то, что мне нужно, но(!), теперь как сделать так, чтобы то, что мне нужно не оборачивалось комментариями? |
Цитата:
|
Лаймас, вы на столько круче меня, что я не понимаю вас. Давайте остановимся на том, что мне надо так - смиритесь. Нет решения сделать по-моему или конструктивно объяснить вашу позицию - молчите.
Вы спец в программировании, я спец в кардиохирургии. Придете ко мне и я буду орать на вас и возмущаться, что курите, что пьете. Еще поучите меня стимуляторы ставить и клапаны пришивать. И вообще лучше не попадайтесь мне на столе. |
Stenli,
если вы спец в медицине, но не понимаете в программировании, тогда почитайте о том, как это делается по человечески. Для того, что изменить html на некоторых страницах, для этого нужно написать РНР код, это всего то три строки будет, что займет максимум 3 минуты, запустить его, что будет выполнено за секунду максимум, выбросить его и забыть. Цитата:
И не надо пугать, то же мне, блин, инквизитор в белом халате. |
Если будет маяться дальше, то примите к сведению, то для РНР
<?=date('d.m.Y', strtotime('0 day'));?> - галиматья полнейшая, это тоже самое, что и текущая дата date('d.m.Y'). А если к какой-то строке даты прибавлять, то полное отсутствие смысла. |
Ну напишите, раз три строчки. Начнем хотя бы отталкиваться от этого. Что третий комментарий засерать флудом уже?
|
Цитата:
Ну если удобно для понимания, давайте напишем так: <?=date('d.m.Y', strtotime('-1 day'));?> |
Цитата:
|
Для того, чтобы дата всегда была бы свежая, когда б ни зашел посетитель на сайт. Давайте забудем про то, как выводить дату.
Мой последний вопрос касался другого. Напомню: как сделать, чтобы не оборачивался код в комментарии. |
Цитата:
|
Цитата:
Опишите более детально, что вы пытаетесь сделать, вероятно есть более простое и правильное решение задачи. Оборачивать даты в php-код на стороне клиента по меньшей мере смешно. $string='Some 31.07.2017 date'; echo preg_replace('#(\d{2}.\d{2}.\d{4})#uim','<div class="some-class">$1</div>',$string); exit; //Result: Some <div class="some-class">31.07.2017</div> date |
Цитата:
|
laimas, я не понял сути задачи, которая стоит перед вопрощающим, однако, если задачей является обернуть все даты в тексте в тег, то извлекать все даты из строки, помещать их в переменные (массив), оборачивать их в тег, после вставлять в шаблон в виде переменной... ну это как-то глупо, что ли.
Я бы так точно делать не стал. |
Цитата:
Если также верить тому, что мне сказали, то исходный код полный бред, а всякие вставки посредством preg_replace для постоянной замены дат в тексте скорректированной текущей датой, еще более бредовый подход. Нужна оперативность замены, можно и в файле переменные прописать которые уже можно редактировать через форму. А в шаблон они должны подставляться обычным способом - вывод переменной. |
Цитата:
Если целью является постоянная "актуализация" даты, то да, тут правильным будет юзать переменные. |
Цитата:
|
Цитата:
1. Я создал для себя страничку на локальном компе index.html - это моя страничка на моем компе и больше ею никто не пользуется - я клиент в этом случае для сервера и один единственный. 2. На этой страничке есть три (всего три) элемента: textarea с id="insertArea", textarea с id="pastArea", button с id="sendTo" 3. В textarea первое я вставляю HTML-код одностраничника со всеми тегами, переносами, списками , это понятно из названия id этого поля. 4. Нажимаю кнопку с id="sendTo", которая запускает jQuery. 5. jQuery обрабатывает текст, ищет выражения /\d{2}\.\d{2}\.\d{4}/g (даты) и заменяет их на <?= date('d.m.Y', strtotime('-3 day'));?> 6. Когда он заменит все даты в HTML-коде, он выгружает результат во второе textarea, у которого тоже говорящее id. 7. Я копирую измененный код из второго поля и вставляю его обратно в одностраничник. 8. Выгружаю одностраничник на сервер, где на него могут зайти все кто желает. Внутри одностраничника есть php-код, который обрабатывается сервером и выдает клиенту HTML-код с датой сдвинутой на -3. Так вот, обработка jQuery, как вы говорите на стороне клиента нужна мне. Мне, Stenli, чтобы вставить php-код в HTML-код лендинга. Все остальные посетители не будут видеть этот php-код, они будут видеть дату. Проблема возникает на 5-м пункте. Здесь почему-то то ли jQuery, то ли браузер добавляют комментарии к php-коду вида <!-- --> Еще раз HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="assets/css/bootstrap/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="assets/css/main.css"> <script type="text/javascript" src="assets/js/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script type="text/javascript" src="assets/js/bootstrap.min.js"></script> <script type="text/javascript" src="assets/js/preland.js"></script> <title>Preland convert</title> </head> <body> <div class="container"> <div class="row"> <div class="text-center" style="margin-top: 20px;"> <button type="button" name="sendTo" value="Send to" id="sendTo" class="btn btn-success">Адаптировать</button> </div> <div class="text-center" style="font-size: 12px; margin: 10px;">Каждый новый текст требует обновления страницы (F5 на клавиатуре или кнопка обновить <span class="glyphicon glyphicon-repeat"></span>)</div> <hr /> <div class="col-lg-8"> <label>Введите html-текст, который нужно адаптировать (правая кнопка мыши + вставить или Ctrl+V)</label> <textarea class="form-control" name="insertArea" id="insertArea" cols="80" rows="10"></textarea> </div> <div class="col-lg-8" style="margin-top: 10px;"> <label>Скопируйте/вырежьте адаптированный html-текст (правая кнопка мыши + копировать или Ctrl+C/X)</label> <textarea class="form-control" name="pastArea" id="pastArea" cols="80" rows="10"></textarea> </div> <br> </div> </div> </body> </html> И еще разок jQuery $(document).ready(function() { var Final = ''; $('#sendTo').on('click', function () { //var insertData = $('#insertArea').val(); // var bodyVal = $('#insertArea').val(); bodyVal = bodyVal.substring(bodyVal.indexOf('<body>')+6, bodyVal.lastIndexOf('</body>')).trim(); var div = $("<div>", {html : bodyVal}); // replace dates var reg = /\d{2}\.\d{2}\.\d{4}/g; $(div).html(function (i,h) { return h.replace(reg, '<?=date(' + 'd.m.Y' + ', strtotime(' + '-3 day' + '));?>'); }); // display result Final += div.html(); $('#pastArea').val(Final); }); }); И да, спасибо за терпение, мужики. Да, Бог с ним, и laimas тоже спасибо. |
Stenli, jQuery дважды подключается чтобы наверняка?)
$(document).ready(function() { var Final = ''; $('#sendTo').on('click', function () { //var insertData = $('#insertArea').val(); // var bodyVal = $('#insertArea').val(); bodyVal = bodyVal.substring(bodyVal.indexOf('<body>')+6, bodyVal.lastIndexOf('</body>')).trim(); // replace dates var reg = /\d{2}\.\d{2}\.\d{4}/g; bodyVal=bodyVal.replace(reg, '<?=date(' + 'd.m.Y' + ', strtotime(' + '-3 day' + '));?>'); // display result Final += bodyVal; $('#pastArea').val(Final); }); }); |
Разрешите продолжить в рамках топика.
Я решил немного изменить схему добавления "чего-либо" вместо даты. Поэтому вместо '<?=date(' + 'd.m.Y' + ', strtotime(' + '-3 day' + '));?>', у меня будет добавляться '{{ $date_shift[v] }}' Но не просто так. Хочу, чтобы с каждой следующей обнаруженной датой изменялось значение [v]. Причем по рандому оно должно либо не изменяться (да-да), либо изменяться на 1 (единичку). Пока насоображал такую схему: var reg = /\d{2}\.\d{2}\.\d{4}/g; var string = '{{ $date_shift[v] }}'; var v=0; $(div).html(function (i,h) { for (var x=0 ; x <=i ; x++ ) { var randomShift = Math.random(); if ( randomShift = 0 ) { v = +1; } else { v = +0; } return h.replace(reg, string); } }); Тупняк у меня наступил в момент, когда мне надо вставить новое значение [v] в переменную string. Ведь она передается как строка. Да и вообще я мог запросто намудрить ввиду своего начинающего уровня. Подмозжите, чем можите... Спасибо. |
Stenli,
if ( randomShift = 0 ) { v = +1; } else { v = +0; } Во-первых, в строке 1 идет не сравнение переменной с числом, а присвоение значения этой самой переменной. Переменная станет равна нулю, а нуль всегда будет считаться за ложь (false). Во-вторых, Math.random() возвращает случайно десятичное число от 0 до 1. Вероятность того, что рандом вернет нуль крайне и крайне мала (даже можно сказать, что она стремится к нулю). В-третьих replace у вас должен выглядеть так: h.replace(reg,'{{ $date_shift['+v+'] }}'); И вообще не понятно, что вы пытаетесь сделать, зачем все это? |
Часовой пояс GMT +3, время: 12:31. |