javascript - Girdi doğrulama için m: ss ile eşleşen RegEx
Aşağıdakileri yerine getirecek bir RegEx oluşturmakta zorlanıyorum:
- dakikalar için sadece bir sayı (0 ila 9);
- saniyeler için yalnızca iki sayı (00 ile 59 arasında);
- şu formatta olmalıdır: m:ss.
Şu ana kadar elimde bu var: ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$
Ancak örneğin 00 durumu geçiyor gibi görünüyor ve geçmemesi gerekiyor, çünkü bu m:ss formatında değil.
Cevap #1
Regex'iniz - ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$ - 0{0}? içeriyor, bu da motorun 0'ı tam olarak sıfır kez eşleştirmesine neden oluyor (bu token göz ardı edilir). Ayrıca gereksiz {1} kullanımı var (çünkü [0-5], 0 ile 5 arasındaki bir rakamı tam olarak bir kez eşleştirir). Tek bir karakteri karakter sınıfına koymanın ([0] gibi) hiçbir anlamı olmadığını unutmayın, bu daha sonra deseni ayarlamanız gerektiğinde sorun yaratabilir. Daha da önemlisi, regex'iniz bir opsiyonel grup içeriyor: (?:([0]{0}?\d):)?, bu grup bir ya da sıfır kez eşleşebilir. Bu nedenle regex'iniz 56 gibi girişlere izin veriyor.
Aşağıdaki regex'i kullanabilirsiniz:
/^\d:[0-5]\d$/
Demo göster
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/>Açıklama :
^- dizenin başı\d- bir rakam:- iki nokta[0-5]-0'dan5'e kadar bir rakam\d- bir rakam$- dizenin sonu
Cevap #2
Bir şeyi kaçırmıyorsam bu çok basit olmalı...
^[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/>İşte tam bir açıklama sağlayan çalışan bir örnek:
^ bir satırın başında konumu doğrular
[0-9] aşağıdaki listede bulunan tek bir karakterle eşleşir 0-9, 0 ile 9 arasındaki aralıktaki tek bir karakter
: karakteri : ile tam olarak eşleşir
[0-5] aşağıdaki listede bulunan tek bir karakterle eşleşir 0-5, 0 ile 5 arasındaki tek bir karakter
[0-9] aşağıdaki listede bulunan tek bir karakterle eşleşir 0-9 aralığındaki tek bir karakter
$ bir satırın sonunda konumu doğrular
