То, что я обычно делаю в подобных случаях, - это «библиотека» тестов регулярных выражений:
var regexTest = function() {
this.TaxId = /^(\d{2})-?\d{7}$/;
this.SSN = /^(\d{3})-?\d{2}-?\d{4}$/;
}
Это отделяет ваше регулярное выражение в случае необходимости его изменения по какой-либо причине.Поверьте мне, это будет происходить время от времени.(Может быть, не SSN / TaxId, но это хорошая практика)
Затем я устанавливаю блок событий, аналогичный тому, который у вас есть (jQuery облегчает), чтобы обеспечить мгновенную обратную связь:
$("#MyField").bind("blur keyup",
function() {
var myVal = $(this).val(); // should store $(this) in a var instead
if(regexTest.SSN.test(myVal) || regexTest.TaxId.test(myVal)) {
$(this).css("background-color", "");
} else {
$(this).css("background-color", "#FF0000");
}
}
);
Iзнаю, что это не подтверждается при отправке, но обеспечивает обратную связь с пользователем при вводе.(Это не так уж плохо в отношении накладных расходов, если вы просто делаете проверку правильной.) Затем выполните проверку вашей стороны сервера данных (люди могут обойти проверки проверки), и вы должны быть хорошими.Да, это не проверка данных перед отправкой, но если пользователь видит красное поле, он знает, что это неверные данные.
Конечно, есть библиотеки проверки, как отмечено в некоторых комментариях, но мне нравитсяписать свои иногда.;)