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'dan 5'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