Autor Zpráva
mimochodec
Profil
Pomohl by mi prosím někdo s ověřením pomocí reguláru? Potřebuju vědět, jestli text je v tomto tvaru:
01:39:05,602 --> 01:39:09,121

Hodiny jsou povinně dvojmístné, přípustná hodnota je 00-99. Minuty a sekundy 00-59, desetinná místa povinně tři. Povinný je i ten text mezi oběma časy.
Pokud text bude odpovídat zadání, potřeboval bych z něj vytáhnout ty dva časy.

Ty časy z toho samozřejmě můžu dostat i jinak, kdyby s tím byl problém. Jen co jsem tak nějak četl, chápu to tak, že by se to dalo spojit s tím ověřením tvaru zápisu.
Tori
Profil
Na jeden časový údaj by šel použít třeba tenhle výraz: (\d{2}:\d{2}:[0-5]{1}\d,\d{3}) Stačí doplnit znaky uprostřed, druhý čas, oddělovače okolo.
mimochodec
Profil
Tori:

$v = "01:39:05,602";
if (preg_match("/\d{2}:\d{2}:[0-5]{1}\d,\d{3}/", $v)) {
  echo "souhlas.";
} 

Tímhle projdou i řetězce s přilepeným čímkoliv po stranách, což nechci. A když ta lomítka na začátku a na konci zruším, dostanu:
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash
Tori
Profil
Kotvy
Joker
Profil
mimochodec:
Tímhle projdou i řetězce s přilepeným čímkoliv po stranách, což nechci.
V tom případě patří ještě na začátek ^ a na konec $
/^\d{2}:\d{2}:[0-5]{1}\d,\d{3}$/
mimochodec
Profil
-- smazáno. Neumím číst. Díky.
Tori:
To je přesně to, do čeho se mi kvůli jednomu reguláru ročně nechtělo pronikat.

Vyrobil jsem toto a zdá se, že to funguje. Díky oběma.
if (preg_match("/^\d{2}:\d{2}:[0-5]{1}\d,\d{3} --> \d{2}:\d{2}:[0-5]{1}\d,\d{3}$/", $v)) {
Tori
Profil
mimochodec:
A teď ještě ty části, které odpovídají časům, dejte do kulatých závorek. Pak je rovnou najdete ve $v[1] a $v[2] a máte zároveň validaci i vytažení dat, jak jste chtěl.
↓ jo pardon, přehlédnutí, spěchala jsem.
mimochodec
Profil
Tori:
Pak je rovnou najdete ve $v[1] a $v[2]

Ve $v ne, ale stačilo přidat toto a výstup je v $out. Díky.
if (preg_match("/^(\d{2}:\d{2}:[0-5]{1}\d,\d{3}) --> (\d{2}:\d{2}:[0-5]{1}\d,\d{3})$/", $v, $out)) {

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0