Как проверить, соответствует ли хотя бы одно из двух подвыражений в регулярном выражении? - PullRequest
7 голосов
/ 06 октября 2008

Я пытаюсь сопоставить десятичные числа с плавающей точкой с регулярным выражением. Число может быть или не быть числом до десятичного знака, а десятичное число может присутствовать или не присутствовать, и если оно присутствует, оно может иметь или не иметь цифры после него (Для этого приложения, ведущий +/- или трейлинг "E123" не допускается). Я написал это регулярное выражение:

/^([\d]*)(\.([\d]*))?$/

Что правильно соответствует следующему:

1
1.
1.23
.23

Однако это также соответствует пустой строке или строке с десятичной точкой, что мне не нужно.

В настоящее время после выполнения регулярного выражения я проверяю, что длина $ 1 или $ 3 больше 0. Если нет, то это недопустимо. Есть ли способ, которым я могу сделать это прямо в регулярном выражении?

Ответы [ 3 ]

6 голосов
/ 06 октября 2008

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

/^\d+(\.\d*)?|\.\d+$/
0 голосов
/ 29 октября 2014

Очень поздний ответ, но нравится отвечать, взято с регулярные-выражения.info

[-+]?[\d]*\.?[\d]+?

Обновление Это [\d]*\.?[\d]+?|[\d]+\. поможет вам сопоставить 1.

http://regex101.com/r/lJ7fF4/7

0 голосов
/ 06 октября 2008

Создать регулярное выражение для каждого случая и ИЛИ их. Тогда вам нужно только проверить, соответствует ли выражение.

/^(\d+(\.\d*)?)|(\d*\.\d+)$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...