Как проверить дату истечения срока действия кредитной карты (2 поля) с помощью livevalidation
Используя http://livevalidation.com/ на специальной странице пожертвований PHP. Я хочу сделать даты истечения срока действия кредитной карты недействительными, но все остальные варианты действительны. Я использую два поля выбора для месяца и года.
Похоже, что это должно быть сделано с функциями validate.custom или validate.now, но в документации нет хороших примеров. Не могу заставить их работать...
<select tabindex="4" id="exp_month" name="exp_month">
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select tabindex="5" id="exp_year" name="exp_year">
<option value="11">2011</option>
<option value="12">2012</option>
<option value="13">2013</option>
<option value="14">2014</option>
<!-- etc -->
</select>
<script>
var exp_year = new LiveValidation( "exp_year", { validMessage: " ", failureMessage: "Enter a valid exp date", onlyOnSubmit: true } );
exp_year.add( Validate.Custom(
// ????
);
</script>
2 ответа
Если вы доверяете системным часам пользователя, то что-то вроде:
var d = new Date();
var y0 = d.getFullYear();
var m0 = d.getMonth() + 1;
var y1 = document.getElementById('exp_year').value;
var m1 = document.getElementById('exp_month').value;
if (y0 == y1 && m0 < m1) {
// selected date is in the past
}
В противном случае, передайте месяц и год с сервера (скажем, в скрытых входах) и проверьте их.
Хорошо - я наконец понял это... используя немного php и получая текущее значение месяца...
var exp_year = new LiveValidation( "exp_year", { validMessage: " ", failureMessage: "Enter a valid exp date", onlyOnSubmit: true } );
exp_year.add( Validate.Custom, { against: function(value){
var currentyymm=<?php print date(ym) ?>;
var expmo1=document.getElementById("exp_month").selectedIndex;
var expmo2=document.getElementById("exp_month").options;
if (value+expmo2[expmo1].value >= currentyymm) { return true; }
else { return false; }
}, failureMessage: "Enter a valid exp date" } );