Ответ 1
Если вы хотите, чтобы все 1, 1.2 и 1.20 работали:
/^(\d{1,3})(\.\d{1,2})?$/
У меня есть это регулярное выражение, но теперь нужно разрешить числа без десятичного числа
// Validate for 2 decimal for money
jQuery.validator.addMethod("decimalTwo", function(value, element) {
return this.optional(element) || /^(\d{1,3})(\.\d{2})$/.test(value);
}, "Must be in US currency format 0.99");
В настоящее время это заставляет пользователя, по крайней мере, добавить .00 в число, хотел бы, чтобы он позволял как текущему регулярному выражению, так и целым числам без десятичного числа.
Я бы просто добавил? в конце второй половины RegEx?
// Validate for 2 decimal for money
jQuery.validator.addMethod("decimalTwo", function(value, element) {
return this.optional(element) || /^(\d{1,3})(\.\d{2})?$/.test(value);
}, "Must be in US currency format 0.99");
EDIT:
Хорошо, но что, если кто-то войдет в 1.2?
Если вы хотите, чтобы все 1, 1.2 и 1.20 работали:
/^(\d{1,3})(\.\d{1,2})?$/
Да, просто добавьте? до конца второй группы, чтобы сделать ее необязательной. Это должно работать хорошо.
$.validator.addMethod("money", function (value, element) {
if ($("#<%= rdOtherAmt.ClientID %> input:checked")) {
return this.optional(element) || /^((\d{1,5})+\.\d{2})?$|^\$?[\.]([\d][\d]?)$/.test(value);
}
});
Это будет работать отлично, принимает два десятичных знака.
Это был лучший, целостный ответ, который мы использовали для валютных входов регулярных выражений, который охватывает все, что нам нужно:/(?=.)^\$?(([1-9][0-9]{0,2 } ([0-9] {3}) *) |?.? [0-9] +) ([0-9] {1,2}) $/
Я хотел протестировать клавиатуру. Поэтому мне нужно было принять 999999. до ввода первой десятичной позиции (десятых). Но, я все еще хотел макс в 2 десятичных (сотых) позициях - предполагая введенный 999.1 == 999.10 в моем коде.
var currencywithcommas = /^(\d+|\d{1,3}(,\d{3})*)+(\.\d{2})?$/;
if ($("#yourelement").val().match(currencywithcommas)) {
// positive match code
}
UPDATE: Я закончил использование плагина проверки jQuery из-за реализации.
Код прототипа:
jQuery.validator.addMethod("currencywithcommas", function (value, element) {
var currencywithcommasReg = /^(\d+|\d{1,3}(,\d{3})*)+(\.\d{2})?$/;
return this.optional(element) || value.match(currencywithcommasReg);
}, "Must be in US currency format 9.99");
Реализация:
$("#form1").validate({
rules: {
amount1: {
required: true,
currencywithcommas: true
},
...
Такая же концепция, но расширена, чтобы использовать функциональность проверки.
$(".reqField1").each(function () {
$(this).keyup(function () {
$("#submitButton").prop("disabled", CheckInputs(".reqField1"));
});
});
function CheckInputs(reqfldclass) {
var valid = false;
$(".reqField1").each(function () {
if (valid) { return valid; }
var input = $.trim($(this).val());
valid = !input;
});
return valid;
}
И, Боб, твой дядя...