Как я могу просто это число формат проверки регулярное выражение?


Итак, у меня есть это утверждение if:
if (String(val).search(/^((d+(((,d{3,})+)?)(.d+)?)|(.d+))$/) !== -1)

Который говорит (насколько мне известно):
Строка должна начинаться либо с одной цифры, либо с ..
Если строка начинается с цифры, в ней могут быть запятые, если за запятыми следуют по крайней мере три цифры. Если строка содержит ., за ней должна следовать по крайней мере одна цифра.
Может быть только один .

Итак, строки например:

5
5.00
5000
5000
5000.00
5,000. 00

Все вернет true

Но строки, содержащие что-либо кроме 0-9 , . или искаженные, вернут false. Итак, строки, подобные этой:

5,00
5,00. 00
5.00.00
a5

Итак, вышеизложенное работает, но мне интересно, есть ли какой-либо способ упростить его?

2 2

2 ответа:

Вы можете удалить некоторые избыточные скобки:

^(\d+((\,\d{3,})+)?(\.\d+)?|\.\d+)$

И что-то вроде (( ... )+)? можно заменить на: ( ... )*, поэтому конечное регулярное выражение может выглядеть следующим образом:

^(\d+(\,\d{3,})*(\.\d+)?|\.\d+)$

И если вы хотите отклонить ввод типа:

50000,000,000.0

И допускают только:

5,000,000.0
50,000,000.0
500,000,000.0

Тогда сделайте что-нибудь вроде этого:

^(\d{1,3}(\,\d{3})*(\.\d+)?|\.\d+)$

Я не думаю, что вы могли бы упростить его, кроме удаления нескольких родителей,и, как это, возможно, недостаточно сложно. Шаблон также позволяет использовать искаженные строки, такие как

50000,000,000.000000000