Возможно ли регулярное выражение для float (x, y)? - PullRequest
1 голос
/ 01 февраля 2020

В дальнейшем float (x, y) означает число с x общими цифрами, и y из них могут быть десятичными.

Я пытаюсь выполнить проверку на стороне клиента для поля ввода html. Поле соответствует столбцу MySQL с типом данных float (x, y). Я знаю, что могу определить шаблон для float (5,2) с большим количеством 'ors'. Есть ли эффективный способ генерации регулярного выражения для этого, чтобы я мог закодировать его в своем веб-документе?

Что-то вроде обходного пути - указать "\ d + (. \ D {1, y})?" и затем установите «maxlength = x + 1». Это «х + 1», потому что учитывается десятичное место. Это тогда позволит представить целое число длины 'x + 1' вопреки спецификации. Я понимаю, что могу сделать Javascript проверку, но я хочу сделать это с HTML проверкой.

1 Ответ

1 голос
/ 01 февраля 2020

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

Если вы хотите X общее число цифр и самое большее Y десятичных знаков, вы можете использовать:

^(?=.{X+1}$)([1-9]\d*|0)\.\d{1,Y}$

Объяснение:

^         asserts you are in the start position of the line
(?=       lookahead (zero length) match for:
    .{X + 1}     X+1 characters
    $            end of line //now you have asserted the total length
the whole part either
    0            is a single zero
    [1-9]\d*     more than a single digit and does not start with zero     
\.        a dot for the decimal point
\d{1,Y}   at least 1 and at most Y digits
$         asserts end of line

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

Пример:

Для X = 5 и Y = 2, у вас будет:

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

Regex101 demo

...