Я хочу, чтобы пользователь вводил только 0-9 и только один раз "."
patt = /[^0-9(.{1})]/ 1.2222 -> true 1.2.2 -> false (only once '.')
помогите мне, спасибо!
/^-?(?:\d+|\d*\.\d+)$/
Это соответствует нормальным поплавкам, например, 3.14
, сокращенным для десятичной части только, например .5
и целым числам, например 9
а также отрицательным числам.
это то, что вы ищете
$re = "~ #delimiter ^ # start of input -? # minus, optional [0-9]+ # at least one digit ( # begin group \. # a dot [0-9]+ # at least one digit ) # end of group ? # group is optional $ # end of input ~xD";
это принимает только «123» или «123.456», а не «.123» или «14e + 15». Если вам нужны эти формы, попробуйте is_numeric
Регулярные выражения предназначены для сопоставления строк. Если вы не указали явно после проверки формата входной строки (но фактического значения), вы также можете использовать
filter_var("1.33", FILTER_VALIDATE_FLOAT);
чтобы убедиться, что вход может использоваться как значение поплавка. Это приведет к возврату FALSE
если в противном случае это не float, а значение float или integer. Применяются любые правила жонглирования .
Вы можете использовать is_numeric()
с предостережением, чтобы он 1e4
бит больше, чем обычно требуется (например, 1e4
).
Почему бы не использовать http://php.net/manual/en/function.is-float.php ? Но в любом случае RegEx будет ^[\d]+(|\.[\d]+)$
весело провести время!
Это регулярное выражение:
\d*(?:\.\d+)?
даст результаты:
123 -> true 123.345 -> true 123. -> true .345 -> true 0.3345 -> true
Тем не менее, вы должны проверить пустоту ввода перед его использованием, поскольку регулярное выражение также допускает ввод нулевой длины .
Почему бы просто не использовать is_numeric
если вы не знакомы с регулярными выражениями.
Что касается вашего регулярного выражения:. соответствует всем символам, \.
соответствует точке. {1}
не требуется. И я не знаю, что вы пытаетесь сделать с [^ ... ]
. Прочтите учебник регулярных выражений, если вы действительно хотите использовать регулярные выражения где-то в своем коде.