Это будет соответствовать yyyy-mm-dd
, а также yyyy-m-d
:
^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$
Если вы ищете точное соответствие для yyyy-mm-dd
, то попробуйте это
^\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$
или используйте это, если вам нужно найти дату в строке вроде The date is 2017-11-30
\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*
Постоянный HTTP, Comet
Поддерживайте соединение HTTP и отправляйте символы по мере их ввода
* Редактировать в 2014 году: также взгляните на WebSocket и заголовок обновления HTTP / 1.1 . Браузеры начали реализовывать это примерно в 2010 году, поэтому я добавляю это в исходный ответ.
Они, вероятно, используют веб-сокеты, также известные как события, отправленные сервером: http://www.w3.org/TR/websockets Можно найти базовый протокол (как draft) в IETF .
Обновление: похоже, что у WebSockets еще нет какой-либо реализации; и видео из Google I / O (перейти к 11:00) рассказывает о долгоживущем HTTP-запросе GET.
Чистая спекуляция, но можно ли использовать события DOM на стороне сервера из спецификации HTML 5?
См. Видео Google Wave: Powered by GWT примерно на 55-й минуте (ближе к концу)
Q: Как вы реализуете постоянные соединения, долгоживущие HTTP-соединения
A: План на будущее: веб-сокеты HTML5. Длительный срок. Это то, что мы используем в настоящее время.
Q: Есть ли для этого платформа или библиотека, с которыми мы можем скачать и поиграть?
A: Не уверен. Не думаю
PS: Так он сказал. Для меня это не имело особого смысла ("
Вероятно, сейчас комета веб-сокет в будущем. Поскольку он работает в Firefox 3.5 и из того, что я читал, веб-сокет доступен только в ночных сборках FF ... Я могу ошибаться ... поскольку он вообще не работает в IE.
Отправка сервера - это парадигма ожидания, ответа, закрытия, повторного открытия:
Ожидание: когда код GWT выполняет вызов на ваш сервер для некоторых данных, которые вы еще нет, заморозить (подождать)
Ответить: как только запрошенные данные будут
доступно, ответьте им
Close: Затем закройте соединение.
Re-Open: Как только ваш код GWT получит ответ, немедленно откройте новое соединение для запроса следующего события.
Вся причина использования WebSockets заключается в том, чтобы браузер оставил двунаправленный сокет открытым для сервера, чтобы можно было использовать связь в реальном времени. Когда кто-то печатает на другом конце в волновом клиенте, он запускает событие, которое отправляется на сервер, а сервер, в свою очередь, проверяет, кто также должен получить событие, и передает им событие, в данном случае набранное письмо.
WebSocket и Comet - разные вещи.
Гранвиль
Я предполагаю, что они используют запросы ajax. Выполните XMLHttpRequest, который является асинхронным, и когда серверу есть что отправить вашему браузеру, зарегистрированный обратный вызов javascript получает данные и делает с ними все, что угодно. Таким образом, браузер запрашивает следующее событие, обрабатывает его, повторяется бесконечно.
Я потратил некоторое время на реверс-инжиниринг клиентского кода Google Wave (бесстыдный плагин для http: // antimatter15.com / misc / read / , который является общедоступным клиентом только для чтения для волны Google для всех общедоступных волн без использования роботов или гаджетов, что было намного полезнее месяц назад, когда Google не запускал обновления).
В любом случае, Google использует структуру GWT с некоторыми аспектами библиотеки Google Closure (которая на самом деле является открытым исходным кодом и документирована), и они используют библиотеку goog.net.BrowserChannel, которая, судя по комментариям, также используется для функций чата в Gmail. .
http://closure-library.googlecode.com/svn/docs/closure_goog_net_browserchannel.js.html