javascript - RegEx til at matche m: ss til inputvalidering
Jeg har haft problemer med at lave et RegEx, der opfylder følgende:
- kun ét tal for minutterne (0 til 9);
- kun to tal for sekunderne (00 til 59);
- skal have formatet m:ss.
Indtil videre har jeg dette: ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$
Dog ser sagen 00 for eksempel ud til at passere, og det burde den ikke, da den ikke er i m:ss-formatet.
Svar #1
Dit regex - ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$ - har en 0{0}?, der får motoren til at matche 0 præcis nul gange (denne token ignoreres). Den har også overflødig {1} (da [0-5] vil matche et ciffer fra 0 til 5 præcis én gang). Bemærk, at der ikke er nogen grund til at placere et enkelt tegn i en tegnklasse (som [0]), det kan forårsage problemer senere, når du har brug for at justere mønsteret. Og vigtigere, dit regex indeholder en valgfri gruppe (?:([0]{0}?\d):)?, der kan matche én eller nul gange. Derfor tillader dit regex input som 56.
Du kan bruge følgende regex:
/^\d:[0-5]\d$/
Se demo
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/>Forklaring :
^- starten af strengen\d- ét ciffer:- et kolon[0-5]- ét ciffer fra0til5rækkevidde\d- ét ciffer$- slutningen af strengen
Svar #2
Medmindre jeg misser noget, burde dette være meget simpelt...
^[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/>Her er et fungerende eksempel, som giver en fuld forklaring:
^ påstår positionen i starten af en linje
[0-9] matcher et enkelt tegn, der findes på listen nedenfor 0-9 et enkelt tegn i området mellem 0 og 9
: matcher tegnet : bogstaveligt
[0-5] matcher et enkelt tegn, der findes på listen nedenfor 0-5 et enkelt tegn i området mellem 0 og 5
[0-9] matcher et enkelt tegn, der findes på listen nedenfor 0-9 et enkelt tegn i området mellem 0 og 9
$ fastslår positionen i slutningen af en linje
