2016-06-02 3 views
1

Я новичок в концепции регулярных выражений.Регулярное выражение для валюты

Я попытался сделать регулярное выражение валюты, в которой

  1. Сумма должна быть отформатирован номер строки, используя «» для разделителя тысяч и «» для десятичного разделителя.

  2. Количество должно быть ровно 2 знака после запятой

  3. Сумма должна быть отлична от нуля, положительное значение

Я попытался это

test1= /^\d{1,3}?([,]\d{3}|\d)*?\.\d\d$/; 
test1.test(1,100.00); 

Но его не выполняю requirements.Suggest Как я могу достичь этого.

+0

Я думаю, что вы тестировали 'test1.test ("1,100.00");', не так ли? Попробуйте ['/^(?! 0 + \. 0 + $) \ d {1,3} (?:, \ D {3} | \ d) * \. \ D {2} $ /. Test (" 1,100.00 ")'] (https://regex101.com/r/uI8rR1/1) –

+2

Возможный дубликат [Проверка валюты Regex] (http://stackoverflow.com/questions/16242449/regex-currency-validation) – Liam

ответ

2

Если вы хотите запретить 0.00 значение, и позволяют номера без символа цифры группировки, вы можете использовать

/^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test(your_str) 

Смотрите regex demo

Объяснение:

  • ^ - начало строки
  • (?!0+\.0+$) - отрицательное опережение, которая не матч, если входной сигнал равен нуль
  • \d{1,3} - от 1 до 3 цифр
  • (?:,\d{3})* - 0+ последовательность запятой следует с 3-х цифрами
  • \. - буквальный точечными
  • \d{2} - 2 цифры (десятичная)
  • $ - конец строки.

document.body.innerHTML = /^(?!0+\.0+$)\d{1,3}(?:,\d{3}|\d)*\.\d{2}$/.test("1,150.25"); 
 
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3}|\d)*\.\d{2}$/.test("0.25"); 
 

 
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("25"); 
 
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("0.00"); 
 
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("1150.25");

+0

это дает true в случае (1150.25), который должен быть ложным в моем случае. –

+0

Почему это должно быть ложным, если вы добавили '\ d' в чередование? Затем вам нужно удалить эту альтернативу. Я обновил ответ. –

+1

Большое спасибо.Это действительно хорошо работает. Я все еще новичок в регулярном выражении Это действительно поможет мне –

1

Если минимальное значение 1.00:

^[1-9]\d{0,2}(?:,\d{3})*\.\d\d$ 

Это не позволяет ведущие нули.

+0

Ну , OP не упоминал об этом, но если разрешены ведущие нули, это тоже не сработает. –

+0

@ WiktorStribiżew: Правильно, я добавил уведомление. – Toto

Смежные вопросы