strtotime будет работать так. даты не совпадают и все в формате usb.
<?php
$e1 = strtotime("2013-07-22T12:00:03Z");
echo date('y.m.d H:i', $e1);
echo "2013-07-22T12:00:03Z";
$e2 = strtotime("2013-07-23T18:18:15Z");
echo date ('y.m.d H:i', $e2);
echo "2013-07-23T18:18:15Z";
$e1 = strtotime("2013-07-21T23:57:04Z");
echo date ('y.m.d H:i', $e2);
echo "2013-07-21T23:57:04Z";
?>
Вы можете преобразовать его в строку и создать выражение, вызвав new RegExp()
:
var myRE = new RegExp (['^(([^<>()[\]\\.,;:\\s@\"]+(\\.[^<>(),[\]\\.,;:\\s@\"]+)*)',
'|(\\".+\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.',
'[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\\.)+',
'[a-zA-Z]{2,}))$'].join(''));
Примечания:
RegExp
принимает модификаторы в качестве второго параметра /regex/g
=> new RegExp('regex', 'g')
[Дополнение ES20xx (тегированный шаблон )]
В ES20xx вы можете использовать тегированные шаблоны . См. Фрагмент.
Примечание:
\s
, \s+
, \s{1,x}
, \t
, \n
и т. д.).
(() => {
const createRegExp = (str, opts) =>
new RegExp(str.raw[0].replace(/\s/gm, ""), opts || "");
const yourRE = createRegExp`
^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|
(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|
(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$`;
console.log(yourRE);
const anotherLongRE = createRegExp`
(\byyyy\b)|(\bm\b)|(\bd\b)|(\bh\b)|(\bmi\b)|(\bs\b)|(\bms\b)|
(\bwd\b)|(\bmm\b)|(\bdd\b)|(\bhh\b)|(\bMI\b)|(\bS\b)|(\bMS\b)|
(\bM\b)|(\bMM\b)|(\bdow\b)|(\bDOW\b)
${"gi"}`;
console.log(anotherLongRE);
})();
Чтобы избежать массива join
, вы также можете использовать следующий синтаксис:
var pattern = new RegExp('^(([^<>()[\]\\.,;:\s@\"]+' +
'(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@' +
'((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|' +
'(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$');
В приведенном выше выражении отсутствуют черные черты, которые не работают должным образом. Итак, я редактировал регулярное выражение. Пожалуйста, рассмотрите это регулярное выражение, которое работает 99.99% для проверки подлинности электронной почты.
let EMAIL_REGEXP =
new RegExp (['^(([^<>()[\\]\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\.,;:\\s@\"]+)*)',
'|(".+"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.',
'[0-9]{1,3}\])|(([a-zA-Z\\-0-9]+\\.)+',
'[a-zA-Z]{2,}))$'].join(''));
Лично я перешел к менее сложному регулярному выражению:
/\S+@\S+\.\S+/
Конечно, он меньше точный , чем ваш текущий шаблон, но что вы пытаетесь выполнить ? Вы пытаетесь поймать случайные ошибки, которые могут возникнуть у ваших пользователей, или вы обеспокоены тем, что ваши пользователи могут пытаться ввести неверные адреса? Если это первый, я бы выбрал более простой шаблон. Если это последний, некоторые проверки, отвечая на электронную почту, отправленную на этот адрес, могут быть лучшим вариантом.
Однако, если вы хотите использовать свой текущий шаблон, было бы (IMO) проще прочитайте (и поддержите!), построив его из более мелких суб-паттернов, например:
var box1 = "([^<>()[\]\\\\.,;:\s@\"]+(\\.[^<>()[\\]\\\\.,;:\s@\"]+)*)";
var box2 = "(\".+\")";
var host1 = "(\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])";
var host2 = "(([a-zA-Z\-0-9]+\\.)+[a-zA-Z]{2,})";
var regex = new RegExp("^(" + box1 + "|" + box2 + ")@(" + host1 + "|" + host2 + ")$");
Расширение ответа @KooiInc позволяет избежать автоматического экранирования каждого специального символа с помощью свойства source
объекта RegExp
.
Пример:
var urlRegex= new RegExp(''
+ /(?:(?:(https?|ftp):)?\/\/)/.source // protocol
+ /(?:([^:\n\r]+):([^@\n\r]+)@)?/.source // user:pass
+ /(?:(?:www\.)?([^\/\n\r]+))/.source // domain
+ /(\/[^?\n\r]+)?/.source // request
+ /(\?[^#\n\r]*)?/.source // query
+ /(#?[^\n\r]*)?/.source // anchor
);
или если вы хотите избежать повторения свойства .source
, вы можете сделать это с помощью функции Array.map()
:
var urlRegex= new RegExp([
/(?:(?:(https?|ftp):)?\/\/)/ // protocol
,/(?:([^:\n\r]+):([^@\n\r]+)@)?/ // user:pass
,/(?:(?:www\.)?([^\/\n\r]+))/ // domain
,/(\/[^?\n\r]+)?/ // request
,/(\?[^#\n\r]*)?/ // query
,/(#?[^\n\r]*)?/ // anchor
].map(function(r) {return r.source}).join(''));
В ES6 функция отображения может быть сведена к: .map(r => r.source)
Использование строк в new RegExp
неудобно, потому что вы должны избегать всех обратных косых черт. Вы можете писать меньшие регулярные выражения и конкатенировать их.
Давайте разделим это регулярное выражение
/^foo(.*)\bar$/
. Мы будем использовать функцию, чтобы сделать вещи более красивыми позже
function multilineRegExp(regs, options) {
return new RegExp(regs.map(
function(reg){ return reg.source; }
).join(''), options);
}
А теперь давайте скажем
var r = multilineRegExp([
/^foo/, // we can add comments too
/(.*)/,
/\bar$/
]);
Так как у него есть стоимость, попробуйте создать реальное регулярное выражение только один раз, а затем используйте это.