Ответ 1
RegEx
// Requires a decimal and commas
^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?\.[0-9]{1,2}$
// Allows a decimal, requires commas
(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$
// Decimal and commas optional
(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?(\.[0-9]{1,2})?$
// Decimals required, commas optional
^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+)?\.[0-9]{1,2}$
// *Requires/allows X here also implies "used correctly"
Распределение RegEx
- Если десятичные знаки являются необязательными, а число может начинаться с десятичного числа, нам нужно убедиться, что вход не пуст:
(?=.)
- Может или не может начинаться со знака доллара (я полагаю, отрицательные значения недействительны):
^\$?
- Следуйте этому с помощью
-?
, чтобы разрешить отрицательные числа
- Следуйте этому с помощью
- Начинается с 1-3 номеров:
[1-9][0-9]{0,2}
- Может быть почти
([0-9]{1,3})
, но это позволит "0,123" - Одно исключение может начинаться с 0 в случае "$ 0.50" или "0.50":
|0
- Может быть почти
- Любое количество трехзначных чисел, разделенных запятой:
(,[0-9]{3})*
- Удалите
?
до\.
, если вы хотите запретить число, начинающееся с "." или "$."
- Удалите
- Требует или разрешает десятичную (одну или две цифры):
\.[0-9]{1,2}
или(\.[0-9]{1,2})?
соответственно - Завершить с
$
(unescaped), чтобы убедиться, что после допустимого числа ничего нет (например, $1,000.00b)
Чтобы использовать регулярное выражение, используйте метод match
и заключите в него регулярное выражение между двумя косой чертой.
// The return will either be your match or null if not found
yourNumber.match(/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/);
// For just a true/false response
!!yourNumber.match(/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/);
Пример основного использования
Демо с тестовыми случаями
var tests = [
"$1,530,602.24", "1,530,602.24", "$1,666.24$", ",1,666,88,", "1.6.66,6", ".1555."
];
var regex = /(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/;
for (i = 0; i < tests.length; i++) {
console.log(tests[i] + ' // ' + regex.test(tests[i]));
document.write(tests[i] + ' // ' + regex.test(tests[i]) + '<br/>');
}