Написание Regex для обработки дополнительных символов с плавающей запятой в начале строки?

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

/^[0-9]{1,10}(\.\d{0,3})?$/

Как и ожидалось, я могу сопоставить следующие значения:

0
0.
0.1
0.12
0.123

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

.1
.12 
.123

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

Можете ли вы показать, как вы пытались использовать необязательный символ? Потому что это должно сработать в вашем случае. Смотрите здесь

mandy8055 02.09.2024 18:36
^(?!\.?$)\d{0,10}(\.\d{0,3})?$ сделать все цифры необязательными с отрицательным предварительным просмотром, все будет в порядке
Hao Wu 03.09.2024 09:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы сопоставить допустимые числа с плавающей запятой, включая предоставленные вами (например, .1, .12, .123), вы можете использовать следующее регулярное выражение:

/^(?:\d{1,10}(\.\d{0,3})?|(\.\d{1,3}))$/

ОБЪЯСНЕНИЕ: ваше исходное регулярное выражение правильно соответствует числам от 1 до 10 цифр до десятичной точки и от 0 до 3 цифр после десятичной точки. Однако он упускает один ключевой случай: числа, начинающиеся с десятичной точки (например, .1, .12, .123).

Чтобы охватить этот недостающий случай, я внес два изменения:

1. Цифры перед десятичной запятой сделаны необязательными: я обернул часть, соответствующую цифрам перед десятичной запятой, в группу без захвата (?: ... )? и сделал ее необязательной с помощью ?. Это позволяет регулярному выражению сопоставлять числа, в которых нет цифр перед десятичной запятой, например .1, .12 и .123.

2. Добавлен альтернативный вариант для сопоставления чисел, начинающихся с десятичной точки: я добавил альтернативный шаблон (\.\d{1,3}) после оператора | (ИЛИ), чтобы явно сопоставлять случаи, когда число начинается с десятичной точки и имеет после него от 1 до 3 цифр. Это гарантирует, что такие числа, как .1, .12 и .123, будут действительными.

Вы также можете сделать необязательную группу не захватывающей и даже удалить группу после чередования, например, так: ^(?:\d{1,10}(?:\.\d{0,3 })?|\.\d{1,3})$

bobble bubble 02.09.2024 20:09

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

Khadija 03.09.2024 11:43

Чтобы сопоставить числа с плавающей запятой, в том числе с десятичной точкой в ​​начале, вы можете использовать следующее регулярное выражение:

/^\d*\.?\d+$|^\.\d+$/

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

В своем текущем состоянии это не соответствует желаемому 0. . Но вы можете изменить квантификаторы и изменить их на ^\d+\.?\d*$|^\.\d+$, чтобы он работал как положено (кроме того, что он не соблюдает предоставленные ограничения).

bobble bubble 02.09.2024 20:16

Другие вопросы по теме