2014-12-12 3 views
2

Я заканчиваю форму, которую я должен сделать для своей домашней работы, и когда я думал, что закончил, я обнаружил ошибку.RegEx для фиксированного количества цифр?

Мне нужен RegEx для поля ввода, который возвращал бы предупреждение, если не было 13 цифр.

Хотя я знаю правильный RegExp для этого: /^\d{13}$/, мне также нужно его игнорировать пустое поле. (Потому что я не хочу, чтобы предупреждение срабатывало, если пользователь переключился на другое поле ввода)

Как раз тогда, когда я думал, что у меня было это: /^$|\d{13}$/, оказывается, что он вернет предупреждение, если будет меньше чем 13 цифр, но нет, если их больше, в отличие от /^\d{13}$/, который отлично работает с 14 + цифрами.

Может ли кто-нибудь помочь мне с этим? Благодаря

Вот остальные функции:

 function checkNum(box) { 
     var re= new RegExp(/^$|\d{13}$/); 
     if(!box.value.match(re)) { 
      alert("13 numbers are required"); 
      document.getElementById("numbers").value = ''; 
     } 
    } 

А вот поле ввода:

<input type="text" name="numbers" id="numbers" placeholder="Numbers" onFocus="this.placeholder=''" onBlur="checkNum(this); this.placeholder='Numbers'"/> 

ответ

5

Очень близко!

/^$|^\d{13}$/ 

Вы просто забыли указать, что 13 цифр начал в начале строки

+1

Вот еще один маршрут ... '^ (\ d {13})? $' – rfornal

+0

Отлично. Так оно и было. Благодаря! Я просто привык к JS. – zduhac

0

Кроме того, только альтернативу match(), для более быстрого использования булевой проверки test()

if (!/^\d{13}$/.test(box.value)) { 
    alert("13 numbers are required"); 
    document.getElementById("numbers").value = ''; 
} 
Смежные вопросы