Регулярное выражение для проверки типов данных, таких как количество, десятичное, пользовательское десятичное? - PullRequest
0 голосов
/ 03 августа 2011

Что такое регулярное выражение для типа данных Decimal, Amount, CustomDecimal, необходимое для проверки?

Мои записи xml содержат несколько значений в строковом формате с типами данных Десятичный, Количество, Тип данных CustomDecimal.

Я использую GWT celltable: EditTextCell Parsed xml установлен на ячейки в таблице. Теперь я хочу проверить эту ячейку с соответствующим типом данных.

Значения в строковом формате, поэтому я хочу сопоставить это с регулярным выражением

Ниже приведены мои критерии регулярного выражения для различных типов данных:

Целое число Может иметь максимальную шкалу 8. ==> (-)? (\ D) {1,8}

Десятичное число Число может быть представлено как (p, s), где p - точность, а s - масштаб. а затем опишите все относительно точности и масштаба. Может иметь максимальный масштаб 8 и максимальная точность 31. Нефракционная часть номер может содержать не более 23 цифр. ->?

Сумма Может иметь максимальную шкалу 8 и максимальную точность 31. ->?

Пользовательское десятичное число Число может быть представлено как (p, s), где p - точность, а s - масштаб. а затем опишите все относительно точности и масштаба. Использовать Custom Десятичный, если вам нужно хранить десятичные дроби, которые имеют более восьми цифр в дробная часть. Может иметь максимальный масштаб 29 и максимальную точность 30. Нефракционная часть номера может содержать не более 29 цифр. ->?

Буду признателен за любую помощь или руководство в этом вопросе.

1 Ответ

2 голосов
/ 03 августа 2011

Целое число

Вам не нужны квадратные скобки, если вы не хотите, чтобы содержимое входило в группу захвата.Поэтому я предполагаю, что это будет хорошо для вас:

-?\d{1,8}

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

^-?\d{1,8}$

^ соответствует началу строки

$ соответствует концу строки

Десятичное число

Попробуйте что-нибудь по

^-?\d{1,23}\.\d{1,8}$

Открытые вопросы здесь:

  • Является ли что-то необязательным, это означает, что некоторые из этих форматов будут разрешены: 1. или .1 или только 1?

  • Какой разделитель фракций . или , или оба?

Если вы хотите сделать необязательную часть, поместите ее в группу без захвата и поместите? за ним ((?:Pattern)?)

Чтобы разрешить обоим разделителям использовать класс символов, подобный этому [.,] вместо \..

Сумма

Отличается ли он от десятичного?

Пользовательский десятичный

Если я правильно понимаю, то он может иметь максимальную длину of 30. И обе части до и после точки могут быть максимумом 29. Я полагаю, тогда, когда моя не дробная часть равна 29, тогда моя дробь может быть максимум 1.

Так что я бы держал ее вдоль десятичного регулярного выраженияи добавьте дополнительную проверку длины, используя утверждение предпросмотра (надеясь, что ваш движок регулярных выражений его поддерживает)

(?=^.{1,30}$)^-?\d{1,23}\.\d{1,8}$

Это утверждение предпросмотра (?=^.{1,30}$) сначала проверяет, если длина всей строки составляет от 1 до 30 символов, если это правдазатем проверяет шаблон.

...