Reputation: 2984
I want user only input 0-9 and only once "."
patt = /[^0-9(.{1})]/
1.2222 -> true
1.2.2 -> false (only once '.')
help me , thank !
Upvotes: 22
Views: 33051
Reputation: 64
I wrote the following regex that seems to work best for my test inputs so far,
/^-?(\d|[1-9]+\d*|\.\d+|0\.\d+|[1-9]+\d*\.\d+)$/
It matches integer using the first two alternatives
\d|[1-9]+\d*
Then it look for numbers like .5, .55, .05 etc., that is beginning with a .
\.\d+
Then it looks for the same as previous but a 0 before the .
0\.\d+
Then finally it looks for patterns integer and decimal parts, such as 5.5, 5.05 etc.
[1-9]+\d*\.\d+
You can test the regex in this link
Upvotes: 2
Reputation: 6441
/^-?(?:\d+|\d*\.\d+)$/
This matches normal floats e.g. 3.14
, shorthands for decimal part only e.g. .5
and integers e.g. 9
as well as negative numbers.
Upvotes: 26
Reputation: 2295
This regex:
\d*(?:\.\d+)?
will give results:
123 -> true
123.345 -> true
123. -> true
.345 -> true
0.3345 -> true
However, you must check emptiness of the input before using it because the regex also permit zero-length input.
Upvotes: 7
Reputation: 317177
Regular Expressions are for matching string patterns. If you are not explicitly after validating the input string's format (but the actual value), you can also use
filter_var("1.33", FILTER_VALIDATE_FLOAT);
to make sure the input can be used as a float value. This will return FALSE
if it is not a float and the float or integer value otherwise. Any type juggling rules apply.
Upvotes: 9
Reputation: 53950
this is what you're looking for
$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";
this only accepts "123" or "123.456", not ".123" or "14e+15". If you need these forms as well, try is_numeric
Upvotes: 24
Reputation: 8237
Why not use http://php.net/manual/en/function.is-float.php ? But anyhow, the RegEx would be ^[\d]+(|\.[\d]+)$
have fun!
Upvotes: 1
Reputation: 70218
Why not just use is_numeric
if you're not experienced with regular expressions.
As to your regex: .
matches all characters, \.
matches a dot. {1}
is not necessary. And I have no clue what you're trying to do with [^ ... ]
. Read the regular expressions tutorial if you really want to use regular expressions somewhere in your code.
Upvotes: 0
Reputation: 449743
You can use is_numeric()
with the caveat that it accepts a bit more than one usually wants (e.g. 1e4
).
Upvotes: 3