Это сделает (ну, в основном ...)
/^£?[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>
- Затем сопоставить конец строки
Чем больше фракций пенсов (нуля в приведенном выше) вам требуется добавить к регулярному выражению, тем менее эффективным оно становится.