Ваше регулярное выражение соответствует строкам, которые содержат хотя бы одно число:
var re = /[0-9]/;
re.test('39583902'); // true
re.test('mostly letters but also 1 number'); // true
re.test('entirely letters'); // false
Инвертируйте логику вашего регулярного выражения и if
условие:
var re = /[^0-9]/;
...
else if (re.test(booking_number)) {
alert('Numbers only, please');
}
Вы также можете отбросить всепроверьте код из вашего обработчика кликов и позвольте браузеру обработать его:
$(document).ready(function() {
$("#contact").on("submit", function(evt) {
console.log("in the form's submit handler");
evt.preventDefault();
// Run your AJAX here
});
});
label {
display: block;
margin: 0.5em 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Enter your details to successfully complete the service request </p>
<form id="contact" action="" method="post">
<label>
Your Address
<input placeholder="123 Anywhere St." type="text" tabindex="1" name="booking_address" required>
</label>
<label>
Your number
<input type="text" tabindex="2" placeholder="12345678" name="booking_number" id="booking_number" required pattern="^\d+$" minlength="8" title="Must contain only numbers" required>
</label>
<label>
Select your date and time
<input type="datetime-local" id='datetime' placeholder="2015-10-21T16:29" name="booking_date" tabindex="3" required>
</label>
<label>
Message (optional)
<textarea placeholder="Placeholders are for example data, not a prompt." tabindex="4" name="booking_message"></textarea>
</label>
<button name="submit" type="submit" id="contact-submit">Submit</button>
</form>
Я добавил атрибут minlength
к номеру бронирования <input>
и исправил его регулярное выражение проверки (HTML просто нужно содержимоеregex, и его управляющий символ - &
; нет необходимости экранировать \d
).
Браузер не отправит форму, которая не проверяет, поэтому вы можете поместить свой AJAX в формуОбработчик submit
(не обработчик click
кнопки отправки), и он будет работать только с действительными данными.Обязательно наберите preventDefault()
для события, чтобы при отправке формы страница не перезагружалась.