RegExp для анализа стоимости валюты - PullRequest
3 голосов
/ 31 августа 2009

Мне нужно написать RegExp в AS3, который анализирует значение валюты в формате Excel в число: Например. RegExp (35 600,00 долл. США) = 35600

И проверяет, правильно ли он отформатирован (с «,» в качестве разделителя тысяч и «.» В качестве десятичной точки. Символ валюты может быть любым (не только $) и может стоять в начале или конец.

Так что мне просто нужно убрать каждую не цифру из номера и проверить, является ли она действительной.

Спасибо! Martin

Ответы [ 3 ]

7 голосов
/ 31 августа 2009

Вам понадобятся два регистра: один для запятой в качестве разделителя, а другой для целых чисел, разделенных десятичной дробью.

Если целое число, удалите все после запятой или десятичной запятой (в зависимости от вашего формата). Затем запустите следующее регулярное выражение:

Это удалит все нецифровые символы:

s/\D+//g;

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

Десятичный разделитель:

 s/[^\d.]+//g

Разделитель запятых:

 s/[^\d,]+//g

* Отказ от ответственности: я только проанализировал эти регулярные выражения в моей голове, поэтому мой синтаксис мог быть немного не в порядке.

1 голос
/ 31 августа 2009

После удаления начальных и конечных символов и пробелов валюты вы можете использовать следующее выражение.

[1-9][0-9]{1,2}(,[0-9]{3})*(.[0-9]{2})+

То есть

(
    [1-9][0-9]{0,2}  One to three digits, no leading zero, followed by
    (,[0-9]{3})*     a thousands separator and three digits, zero or more times,
  |                  or
    0                a leading zero.
)
(.[0-9]{2})?         Optional a decimal point followed by exactly two digits.

Хорошая обработка символа валюты - не самая простая вещь, потому что вы должны избегать вводов с начальным и конечным символом валюты. Решением будет использование прогнозного утверждения.

(?=$(([$€] ?)?[0-9,.]+|[0-9,.]+( ?[$€]))^)[$€ ]+<ExpressionFromAbove>[$€ ]+

Это делает следующее.

(?=                   Positive look ahead assertion.
  $                   Anchor start of line.
  (                   Begin options.
    ([$€] ?)?         Optional leading currency symbol followed by an optional space
    [0-9,.]+          and one or more digits, thousand separators, and decimal points
  |                   or
    [0-9,.]+          one or more digits, thousand separators, and decimal points
    ( ?[$€])          followed by an optional space and and a currency symbol.
  )                   End options.
  ^                   Anchor end of line.
)
[$€ ]+                Leading currency symbol and optional space.
<ExpressionFromAbove> Match the actual number.
[$€ ]+                Trailing optional space and currency symbol.

Если вы знаете, что формат правильный, вычеркните все, что не является цифрой или десятичной запятой, и разберите его на десятичное число (в C # это будет использовать Decimal.Parse ()), или, если есть нет подходящего метода синтаксического анализа, просто разбить на десятичную точку, разобрать в целые числа и объединить оба числа.

0 голосов
/ 31 августа 2009
[$|£|<insert more pipe sepatared options here>]?(\d)*(,)?(\d)*.\d\d[$|£|<insert more pipe sepatared options here>]?

Может работать.

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