Vyhledávání na webu

javascript - RegEx pro shodu m: ss pro ověření vstupu


Snažil jsem se vytvořit regulární výraz, který by splnil následující:

  • pouze jedno číslo pro minuty (0 až 9);
  • pouze dvě čísla pro sekundy (00 až 59);
  • musí mít formát m:ss.

Zatím mám toto: ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$

Nicméně případ 00 se například zdá být platný, a neměl by být, protože není ve formátu m:ss.

Odpověď č. 1

Váš regulární výraz - ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$ - obsahuje 0{0}?, který způsobuje, že engine se pokusí odpovídat 0 přesně nula krát (tento token je ignorován). Obsahuje také zbytečné {1} (protože [0-5] přesně jednou odpovídá číslici od 0 do 5). Upozornění, že není důvod umisťovat jeden znak do znakové třídy (například [0]), může to způsobit problémy později, až budete potřebovat upravit vzor. A co je důležitější, váš regulární výraz obsahuje volitelnou skupinu (?:([0]{0}?\d):)?, která se může opakovat jednou nebo vůbec. Proto váš regulární výraz umožňuje vstupy jako 56.

Můžete použít následující regulární výraz:

/^\d:[0-5]\d$/

Zobrazit ukázku

var rx = /^\d:[0-5]\d$/;
var tests = ['0:00','1:34','156','3:67','45:55','56','4:344'];

for (var i = 0; i < tests.length; i++) {
  document.getElementById('result').innerHTML += tests[i] + ": " + (rx.test(tests[i])) + "<br/>";
}
input:valid {
  color: green;
}
input:invalid {
  color: red;
}
<div id="result"/>
<input type="text" pattern="\d:[0-5]\d" /><br/>

Vysvětlení :

  • ^ - začátek řetězce
  • \d - jedna číslice
  • : - dvojtečka
  • [0-5] - jedna číslice z rozsahu 0 až 5
  • \d - jedna číslice
  • $ - konec řetězce

Odpověď č. 2

Pokud něčemu nerozumím špatně, mělo by to být velmi jednoduché...

^[0-9]:[0-5][0-9]$

var regex = /^[0-9]:[0-5][0-9]$/;
var input = $('input');
input.keyup(function() {
  if (regex.test(input.val()))
    input.removeClass('error');
  else
    input.addClass('error');
});
input.error {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input/>

Zde je fungující příklad, který poskytuje úplné vysvětlení:

^ potvrzuje pozici na začátku řádku

[0-9] odpovídá jednomu znakem přítomnému v níže uvedeném seznamu 0-9 jeden znak v rozsahu mezi 0 a 9

: odpovídá znaku : doslovně

[0-5] odpovídá jednomu znaků přítomnému v níže uvedeném seznamu 0-5 jeden znak v rozsahu mezi 0 a 5

[0-9] odpovídá jednomu znaků přítomnému v níže uvedeném seznamu 0-9 jeden znak v rozsahu mezi 0 a 9

$ potvrzuje pozici na konci řádku