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 rozsahu0až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
