2013-04-11 2 views
0

Я существующий регулярное выражение:Regex - Пустое поле в форме проверки

/^(\d*)(\.(\d*))?$|^$/ 

Как добавить/изменить проверку на пустое поле - (\ S *) к этому? - пытаясь изучить регулярное выражение, выполнил поиск, но не нашел подходящих ресурсов.

+1

Ваше существующее регулярное выражение уже избыточно, так как первая ветвь уже допускает пустой ввод ('*' разрешает ноль, '?' Делает другую деталь необязательной) ... –

+2

у вас много вопросов и нет принятого ответа .. – mihai

ответ

0

Прежде всего, ваша |^$ часть избыточна. Но если вы пытаетесь запретить пустое поле, вы могли бы попробовать это вместо:

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

Если вы хотите игнорировать пробелы в начале и в конце, попробуйте следующее:

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

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

+0

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

0

Так что ваш регулярное_выражение говорит:.

Матч с самого начала -^- ноль или более цифр - \ d * -, что, возможно, следуют точка и ноль или более цифр - ((\ d *))? - без ничего после - $, конец строки. Или - | - соответствовать началу строки, за которой следует конец строки -^$ -.

Что нужно изменить, это последняя часть. Вместо ^$ вы можете сопоставить ^\s*$, который читается как «соответствуют началу строки, затем следуют ноль или более пробелов, а конец строки«. Таким образом, он соответствует как предыдущему условию (нулевые пробелы - от начала до конца), так и новому условию - с некоторыми пробелами.

Надеюсь, что это поможет лучше понять регулярное выражение. К сожалению, я не знаю хорошего ресурса для RegExp, я просто использую MDN.

+0

/^ (\ d *) (\. (\ d *))? $ |^\ s * $/- поэтому этот, не проверяющий пустые значения в поле, также делает это регулярное выражение блоком (,) .. он также не позволяет запятую – user1022521

+0

'/^(\ d *) (\. (\ d *))? $ |^\ s * $ /. test ("") === true', поэтому он соответствует пустым значениям, в которых предыдущее не выполнялось: '/^(\ d *) (\. (\ d *))? $ |^$ /. test ("") === false'. Что касается запятой, я только что изменил регулярное выражение, объясняя шаг за шагом, поэтому он ведет себя как предыдущий для запятых - он не проверяет запятую; предыдущего не было, и вопрос не упоминал их. Я просто ответил на ответ, пытаясь объяснить, как читать регулярное выражение. – ZER0

0

Вы пытались использовать www.debuggex.com, чтобы помочь вам с вашим регулярным выражением? Я думаю, что это регулярное выражение вы ищете:

^(?:(\d*)(?:\.(\d*))?|\s*)$ 

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

Смежные вопросы