Регулярное выражение валюты Великобритании для javascript - PullRequest
3 голосов
/ 15 июня 2009

Я получаю регулярное выражение, соответствующее валюте Великобритании (т. Е. 13,00 фунтов стерлингов, 9 999,99 фунтов стерлингов и 12 333 332,02 фунтов стерлингов), но не допускает отрицательных (- 2,17 фунтов стерлингов) или нулевых значений (0,00 или 0 фунтов стерлингов). *

Я пытался создать его сам, но попал в тупик!

Любая помощь получена.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 15 июня 2009

Это сделает (ну, в основном ...)

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

Использует ^ и $, чтобы убедиться, что в строке нет отрицательного или другого символа, и предполагает использование запятых. Символ фунта и пенс необязательны.

edit: понял, что вы сказали не ноль, поэтому заменил первый \ d на [1-9]

Обновление: было указано, что выше не будет соответствовать £ 0,01. Приведенное ниже улучшение приведет к , но теперь существует уровень сложности, на котором, возможно, лучше сначала проверить / [1-9] /, а затем выше - не тестировать его.

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

Краткое объяснение:

  • Соответствует началу строки, за которым следует необязательное "£"
  • Затем сопоставьте либо :
    • a> £ 1 сумма с возможностью группирования через запятую и необязательного пенса
    • ИЛИ <£ 1> = 0,10 £
    • ИЛИ <= £ 0,09 сумма </li>
  • Затем сопоставить конец строки

Чем больше фракций пенсов (нуля в приведенном выше) вам требуется добавить к регулярному выражению, тем менее эффективным оно становится.

4 голосов
/ 28 марта 2012

В Unix / Linux не всегда возможно ввести знак «£» в файле JavaScript, поэтому я склонен использовать его шестнадцатеричное представление, таким образом:

/ ^ \ XA3 \ д {1,3} ([,] \ d {3} | \ г)??? * ([.] \ Д {1,2}) $ /

Это похоже на все комбинации представления сумм в британской валюте, с которыми я сталкивался.

0 голосов
/ 15 июня 2009

Вы можете просто сделать два прохода:

/^£\d{1,3}(,\d{3})*(\.\d{2})?$/

для проверки формата и

/[1-9]/

, чтобы убедиться, что хотя бы одна цифра отлична от нуля.

Конечно, это менее эффективно, чем делать это за один проход (спасибо, Аннаката, за информацию о тестах), но для первой реализации просто "сказать, что вы хотите" может значительно сократить время разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...