регулярное выражение, чтобы добавить ограничение в 10 цифр с десятичным значением без ограничения - PullRequest
0 голосов
/ 29 мая 2020
• 1000 Я пробую это регулярное выражение ^(10|\d)(\.\d{1,2})?$ Но при этом я добавляю только десятичные цифры с ограничением в два. Как мне этого добиться?

Ответы [ 4 ]

1 голос
/ 29 мая 2020

Значение перед десятичной дробью должно быть меньше 10 цифр

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

Если ваше требование - иметь хотя бы один di git перед десятичной дробью, а затем изменить {0-9} на {1,9}.

Если ваше требование должно иметь от нуля до десяти цифр перед десятичной дробью, измените * От 1011 * до {0,10}.

Код: ( Демо )

$tests = [
    '12345678901',
    '1234567890',
    '123456789',
    '1234567890.1',
    '1234567.8901',
    '1234.5678901',
    '1.2345678901',
    '.12345678901',
];

foreach ($tests as $test) {
    var_export([$test, (bool)preg_match('~^\d{0,9}(?:\.\d+)?$~', $test)]);
    echo "\n";
}

Вывод:

array (
  0 => '12345678901',
  1 => false,
)
array (
  0 => '1234567890',
  1 => false,
)
array (
  0 => '123456789',
  1 => true,
)
array (
  0 => '1234567890.1',
  1 => false,
)
array (
  0 => '1234567.8901',
  1 => true,
)
array (
  0 => '1234.5678901',
  1 => true,
)
array (
  0 => '1.2345678901',
  1 => true,
)
array (
  0 => '.12345678901',
  1 => true,
)
1 голос
/ 29 мая 2020

Если общее количество не должно превышать 10, а di git не может начинаться с запятой, вы можете указать не 11 цифр и оставить \d+ для соответствия 1 или более цифрам.

^(?!(?:[^\d\r\n]*\d){11})\d+(?:\.\d+)?$

Пояснение

  • ^ Начало строки
  • (?! Отрицательный просмотр вперед, утверждение, что то, что справа, не
    • (?:[^\d\r\n]*\d){11} Соответствует 11 раз любому символу, кроме символа новой строки, за которым следует di git
  • ) Закрыть просмотр вперед.
  • \d+ Соответствие 1 + цифры
  • (?:\.\d+)? Необязательно сопоставить точку и 1+ цифр
  • $ Конец строки

Regex demo

0 голосов
/ 29 мая 2020

Вы указываете две вещи (и не показываете много примеров для работы):

  • «Значение перед десятичной дробью должно быть меньше 10 цифр»
  • «I требуется ограничение в 10 цифр для значения, но значение после десятичного числа не имеет ограничения "

Какой из них? Я пошел с первым предположением, что не может быть больше 9 цифр, но должна быть хотя бы одна. Также для проверки правильности номера я подумал, что имеет смысл только начинать с одного нуля или совсем не с нуля:

^(?:0|[1-9]\d{0,8})(?:\.\d+)?$

См. Онлайн-демонстрация


  • ^ - начало привязки строки.
  • (?: - 1-я группа без захвата.
    • 0|[1-9]\d{0,8} - одиночный ноль или одиночный di git от 1 до 9, за которым следуют еще от нуля до 8 цифр, чтобы в сумме оставалось менее 10 цифр.
  • ) - закрытие 1-й группы без захвата.
  • (?: - 2-й группы без захвата.
    • \.\d+ - буквальная точка, за которой следует одна или несколько цифр.
  • ) - закрыть вторую группу без захвата.
  • ? - Сделать вторую группу без захвата необязательной.
  • $ - Конечная строка ancor.

Regular expression visualization

Примечание: Это можно упростить, если разрешить номерам начинаться с точки.

0 голосов
/ 29 мая 2020

Следующий шаблон будет работать для <= 10 цифр перед точкой и любого количества цифр после точки. </p>

$b = preg_match("!^\d{1,10}(\.\d*)?$!",109.9);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...