2014-01-31 5 views
0

В моей форме у меня есть поле, которое спрашивает пользователя, в какое время они хотели бы, чтобы я их называл.JavaScript - RegEx для времени или определенной строки

Код для ввода следующим образом (за исключением <form> тегов):

<p> 
    <label>When can we call you?:</label> 
    <br> 
    <input type="text" name="contactconvenience" placeholder="HH:MM or &#34;anytime&#34;" onchange="checkCallTime()"> 
</p> 
<div id="callbackwarn"></div> 

Я хочу использовать RegEx для проверки того, как пользователь ввел ли время в формате HH: MM или конкретный строка «в любое время», но код, который я использую, не работает.

var callback = /^\d{2}([:]\d{2})$/; 

var callbackanytime = str.match(/anytime/g); 

function checkCallTime() { 
    var valid = true; 

    if ((!callback.test(document.bookingsform.contactconvenience.value)) || (!callbackanytime.test(document.bookingsform.contactconvenience.value))) { 
     document.bookingsform.contactconvenience.style.border = "1px solid red"; 
     document.getElementById("callbackwarn").innerHTML = "Enter a time in the format HH:MM or type \"anytime\"."; 
     document.bookingsform.contactconvenience.title = "Please enter a time in the format HH:MM or type \"anytime\"."; 
     document.getElementById("callbackwarn").style.display = "block"; 
     valid = false; 
    } else { 
     document.bookingsform.contactconvenience.style.border = "1px inset #EBE9ED"; 
     document.bookingsform.contactconvenience.style.borderRadius = "2px"; 
     document.getElementById("callbackwarn").style.display = "none"; 
    } 
} 

Как вы можете видеть, у меня есть два отдельных выражения RegEx, одно для совпадения времени в формате HH: MM; а другой для сопоставления конкретной строки «в любое время».

В самой функции я использую ||, чтобы увидеть if любой из регистров, которые были сопоставлены или нет.

NB: Я знаю, что я использую onchange, а не onsubmit, то <form> тег состоит из onsubmit вызов на мастер-функции.

ответ

1

Assumming 00:00 for midnight;

var callback = /^(([01]\d|2[0-3]):([0-5]\d)|anytime)$/; 

if (!callback.test(document.bookingsform.contactconvenience.value)) 
{ 
    // error code 
} 
+0

Это не работает, если я набираю произвольные символы, он не покажет ошибку. Я удалил '||' и теперь просто использовал ваш один RegEx. Есть идеи? – RoyalSwish

+0

Да, это не работает для меня. Я даже скопировал и вставил ваш код, все равно ничего. – RoyalSwish

+0

Работы нормально для меня? http://jsfiddle.net/alexk/4AZqs/ (нужно щелкнуть по входному сигналу, чтобы поднять событие) –

0

Вы должны использовать AND && не OR || между двумя тест:

if ((!callback.test(document.bookingsform.contactconvenience.value)) 
    && 
    (!callbackanytime.test(document.bookingsform.contactconvenience.value))) { 

НЕ (А или В) < => НЕ AND NOT B

Вы также могли бы использовать уникальное регулярное выражение:

/^\d{2}:\d{2}|\s*anytime\s*$/; 
+0

Я изменил его, и это не сработало. Затем я попробовал ваш уникальный RegEx и все еще не работал. Есть идеи? – RoyalSwish

+0

Какова ценность 'contactconvenience'. – Toto

+0

Я думаю 'Нет'? Я не дал тегу атрибут 'value'. – RoyalSwish

Смежные вопросы