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 !
/^-?(?:\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.
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
D (PCRE_DOLLAR_ENDONLY) If this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines). This modifier is ignored if m modifier is set. There is no equivalent to this modifier in Perl. FYI: the x is for Extended: for suppressing any whitespace charsRegular 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.
You can use is_numeric() with the caveat that it accepts a bit more than one usually wants (e.g. 1e4).
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
Why not use http://php.net/manual/en/function.is-float.php ? But anyhow, the RegEx would be ^[\d]+(|\.[\d]+)$ have fun!
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.