I am making a table that has input with price on every row, so when the user input positive number, or negative number, or decimal number or negative with decimal number, it need to has thousand separator on the number and should not have leading zeroes. I am avoiding library because using library, I need to change so much code, but i am welcome on library with minor fix. There are many stackoverflow's post on thousand separator without leading zeroes, but the post only dealing with one type number like positive or negative number, what I need is a number that is negative and decimal as well. I prefer regular expression so I don't have to change a lot of code.
Related
I am trying to only allow numeric values, along with a possible negative symbol at the front of the string, and a single decimal, using Regex in JavaScript. This input value will only allow for a possible 10 digits also.
Currently, when a user inputs text, I have this logic that will only allow numbers, negative signs, and decimals. However, I want to limit the number of the negative sign to one, and only allow this at the front of the string. Also, I want to limit the number of decimals to one.
input.slice(0, 10).replace(/[^0-9.\-]/, '');
Can anyone please help me figure this out?
You can do:
input.slice(0, 10).match(/([-]?)([0-9]+)([.]?)([0-9]?)/);
Short n sweet.
/^-?\d{0,10}(\.\d{0,3})?$/
optional negative char. at the start
allows max of 10 digits next
again optional decimal group with at most 3 decimal places
These barriers can be modified accordingly.
I am trying to build regex that can validate number or range input.
Allowed values are
Any number between 1 and 1816
A range consisting of 2 numbers separated by -. Each number must be between 1 and 1816. E.g. "1-1816", "3-100", "1815-1816"
Invalid values include
"0"
negative numbers (like "-13")
numbers with leading zeros (like "01")
numbers out of range 1-1816 (alone or as part of range)
Any regex will be fine JavaScript or C#.
So far I figured out just
(?<=\s|^)\d+(?=\s|$)
The problem with your regex is that you are accepting all digits via \d and not limiting it to suit your accepted range.
Use this:
^(?:181[0-6]|180\d|1[0-7]\d{2}|[1-9]|\d{2,3})(?:-(?:181[0-6]|180\d|1[0-7]\d{2}|[1-9]|\d{2,3}))?$
This regex limits the numbers to be in the range 1-1816, while supporting either individual numbers or a range via a hyphen separator as specified.
Demo
This regex should do the trick:
^([1-9][0-9]{0,2}|1[0-7][0-9]{2}|180[0-9]|181[0-6])(-([1-9][0-9]{0,2}|1[0-7][0-9]{2}|180[0-9]|181[0-6]))?$
Basically it allows
A number with leading 1 and 0 to 2 more digits
A number with leading 1, followed by 0-7 and twice any number
A number with leading 180 followed by one more number
A number with leading 181 followed by one number 0-6
This optionally once more repeated after -
But generally regexes are not good to work with numbers (and hard to update whne the number changes). If you have such option I'd rather just validate the number by much simpler regex, like
^[1-9][0-9]{0,3}(-([1-9][0-9]{0,3}))?$
and than programmatically split it by - (if present) and parse the individual segments as integer and validate their numeric value against the range.
That would additionally allow you to check for invalid ranges like 100-1, 1800-1800 etc.
With reference to my previous question currency regex
I want to add an condition, i want to allow decimal only if it starts with 0
example
0.25 should be allowed
1.25 not allowed
current regex is as following
/^(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?$/
which matches comma trailing etc.
This will match all the currency matches from before without decimals or decimals with 0.x*
/^((?:\d{1,3}(?:,\d{3})+|\d+)|(?:0\.\d+))$/
If you only want to match 0.xx instead of an arbitrary number of decimal places use
/^((?:\d{1,3}(?:,\d{3})+|\d+)|(?:0\.\d{2}))$/
This one changes \d+, one or more digits, to \d{2}, exactly 2 digits.
I need a little help with changing the following regex to allow negative numbers. It needs to allow decimal numbers of up to a maximum of 4 decimal places, which it already does.
/^\d+(\.\d{1,4})?$/
Can anyone help?
Thanks
Just put -? before the first digit - "optionally match a minus sign"
Add the - in the character class with optional(?)
/^[-+]?\d+(\.\d{1,4})?$/
The following allows for integer numbers (123), integer with 1 to 4 fractional part (123.1234) and only 1 to 4 fractional part (.1234), that's usually accepted as a valid number. All options can be prefixed by plus or minus signs:
/^[-+]?(?:\d+|\d*(?:\.\d{1,4})?)$/
The (?:xxx) construction is preferred to (xxx) when we're not interested to capture the matches, because it requires less resources.
How to allow only a valid floating point number into a text field
floating point like these only
15
15.41
7045.12
0.74
--only 2 places after the digit
--max one dot
--only positive number so no need for +/-
/^\d+(?:\.\d{1,2})?$/
and I bet this has been asked here before...
This regex allows integers or floats with one or two decimal places. The integer part is mandatory.
If your intent is not to validate input strings but to find decimal numbers inside a larger string, use this instead:
/\b\d+(?:\.\d{1,2})?\b/
Following should work
/\d+(\.\d{1,2})?/
This should work /([0-9]+(\.[0-9]{1,2})?)/ if you want to just match them.
If you want to validate a string - /^([0-9]+(\.[0-9]{1,2})?)$/