I want the EURO format to be accepted only in the following forms.
Three digits with "." Be segregated.
i found this expression but not work in my way:
^(0|(([1-9]{1}|[1-9]{1}[0-9]{1}|[1-9]{1}[0-9]{2}){1}(\ [0-9]{3}){0,})),(([0-9]{2})|\-\-)([\ ]{1})(€|EUR|EURO){1}$
I want it to be exactly like the following:
1.123,45
1,23
1.234.567,45
0,56
I want two digit cent to be mandatory.
thanks
You can try
^(?!0\d)\d{1,3}(?:\.\d{3})*,\d{2}$
^ start of the string
(?!0\d) negative lookahead, make sure there's no leading 0s like 01,25, remove it if it is allowed
\d{1,3} 1 to 3 digits
(?:\.\d{3})* followed by any occurances of texts like .123
,\d{2} followed by 2 decimal digits, mandatory. If you want it to be optional, replace it with (?:,\d{2})?
$ end of the string
See the test cases
-?(\d{1,3})(\.\d{3})*(,\d{2})? (€|EURO?)
This will capture the numbers. You never ever need {1} because that is the default assumption. Also spaces don't need to be escaped.
Related
I want to validate my currency field with regex. I want to allow the following pattern entries
1.23
1
.45
0.56
56.00
No comma should be allowed. I've tried \d+(\.\d\d) but it allows only first, fourth and fifth entries. \d+(?:\.\d\d+)? allows all but third one.
Use \d* instead of \d+ before the decimal to match zero or more digits. Also add anchors (^ and $) or else it will pass as long as there is any match available. This would also validate an empty string, so if necessary you can use a lookahead to make sure there is at least one digit:
^(?=.*\d)\d*(?:\.\d\d)?$
Regexes for floating-point numbers are a solved problem:
\d*\.?\d+
For at least two decimals:
(\d*\.\d)?\d+
To make it more comprehensible:
\d+|\d*\.\d{2,}
And for exactly two decimals:
\d+|\d*\.\d{2}
Depending on your language, don't forget to anchor the expression so that it must match the whole string.
I am new at using the regex.
I want to allow strings with following format:
(Any number of digits).(two digits after .)
e.g. 11.34, 111.78, 132323.78
Can anybody please help me in this?
That would be \d+\.\d\d
\d means any digit
+ means one or more
\. means a literal dot.
EDIT
if you actually mean "two or more digits after" as Mu Mind suggests try the following:
\d+\.\d\d+
\d+\.\d\d
That will match 1 or more digits, then a dot, then 2 digits. (those last two digits must exist in this case.
Fixed: Extra dot
I want users to be allowed to enter numbers, up to 3 digits before the decimal place, with an optional decimal place and a maximum of 2 digits after the optional decimal place.
I want it to match: 12, 123, 123.5, 123.55, 123.
I do not want it to match: abc, 1234, 123.555
What I have so far it:
^\d{0,3}(.?)\d{0,2}$
At the moment it is still matching 1234. I think I need to use the look behind operator somehow but I'm not sure how.
Thanks
Try this:
^\d{0,3}(?:\.\d{0,2})?$
Or better, to avoid just a .:
^(?:\d{1,3}(?:\.\d{0,2})?|\.\d{1,2})$
Specifically, note:
Escaping the dot, or it matches any character (except new lines), including more digits.
Made the whole decimal part optional, including the dot. That is - the decimal dot is not optional - it must be including if we are to match any digit from the decimal part.
Even if you have escaped the dot, ^\d{0,3}(\.?)\d{0,2}$ isn't correct. With the dot optional, it can match 12378: \d{0,3} matches 123, (\.?) doesn't match anything, and \d{0,2} matches 78.
Working example: http://rubular.com/r/OOw6Ucgdgq
What about this?
/^\d{0,2}(?:\d\.|\.\d|\d\.\d)?\d?$/
Maybe this (untested)
^(?=.*\d)\d{0,3}\.?(?<=\.)\d{0,2}$
Edit - the above is wrong.
#Kobi's answer is correct.
A lookahead could be added to his first version to insure a NOT just a dot or empty string.
^(?=.*\d)\d{0,3}(?:\.\d{0,2})?$
You have to put the combination of decimal point and the decimal numbers optional. In your regex, only the decimal number is optional. 1234 is accepted because 123 satisfy ^\d{0,3}, not existing decimal point satisfy (.?), and 4 satisfy \d{0,2}.
Kobi's answer provided you the corrected regex.
I know there are a ton of regex examples on how to match certain phone number types. For my example I just want to allow numbers and a few special characters. I am again having trouble achieving this.
Phone numbers that should be allowed could take these forms
5555555555
555-555-5555
(555)5555555
(555)-555-5555
(555)555-5555 and so on
I just want something that will allow [0-9] and also special characters '(' , ')', and '-'
so far my expression looks like this
/^[0-9]*^[()-]*$/
I know this is wrong but logically I believe this means allow numbers 0-9 or and allow characters (, ), and -.
^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$
\(\d{3}\)|\d{3} three digits with or without () - The simpler regex would be \(?\d{3}\)? but that would allow (555-5555555 and 555)5555555 etc.
An optional - followed by three digits
An optional - followed by four digits
Note that this would still allow 555555-5555 and 555-5555555 - I don't know if these are covered in your and so on part
This match what you want numbers,(, ) and -
/^[0-9()-]+$/
^[0-9-+\s]+$
06754654
+54654654
+546 546 5654 43534 +
+09945 345 3453 45
Why do you have a stray ^ in there? I think you meant [()-] This is actually making you have to have two beginning-of-strings in the regex, which will never match.
Also, \d is a nice shortcut for [0-9]. They are exactly the same.
Also, this will only match a bunch of numbers, then a bunch of ( or ) or -. Something like: 1294819024()()()()()-----()- would match. I think you want the whole thing to be able to repeat, something like: ^(\d*[()-]*)*$. Now, you can match repeating sequences of this.
Now, it is important to notice that nested * are typically inefficient, we can realize that we are just wanting to match any digit and the punctuation you want: [\d()-]*
For digits you can use \d. For more than one digit, you can use \d{n}, where n is the number of digits you want to match. Some special characters must be escaped, for example \( matches (. For example: \(\d{3}\)\-\d{3}\-\d{4} matches (555)-555-5555.
The second carat (afaik) is going to break anything you do since it means "start of string".
What you appear to be asking for therefore is:
start of string, followed by...
any number of numeric characters, followed by...
start of string, followed by...
any number of '(',')', or '-' characters, followed by...
end of string
Which won't work even if that second carat does nothing, because you're not accounting for anything after the first '(',')', or '-', and in fact will probably only validate an empty string if that.
You want /^[0-9()-]+$/ for a very crude pattern which will "work".
If you are doing US only number the best solution is to strip out all the non-digit characters and then just test to see if the length == 10.
I have two regular expressions that validate the values entered.
One that allows any length of Alpha-Numeric value:
#"^\s*(?<ALPHA>[A-Z0-9]+)\s*"
And the other only allows numerical values:
#"^\s*(?<NUM>[0-9]{10})"
How can I get a numerical string of the length of 11 not to be catched by the NUM regex.
I think what you're trying to say is that you don't want to allow any more than 10 digits. So, just add a $ at the end to specify the end of the regex.
Example: #"^\s*(?[0-9]{10})$"
Here's my original answer, but I think I read you too exact.
string myRegexString = `#"(?!(^\d{11}$)` ... your regex here ... )";
That reads "while ahead is not, start, 11 digits, end"
If it's single line, you could specify that your match must happen at the end of the line, like this in .net ...
^\s*([0-9]{10})\z
That will accept 1234567890 but reject 12345678901.
Do you mean you want to match up to 10 digits? Try this:
#"^\s*[0-9]{1,10}\s*$"
If you are trying to match only numbers that are 10 digits long, just add a trailing anchor using $, like this:
^\s*(?:[0-9]{10})\s*$
That will match any number that is exactly 10 digits long (with optional space on either side).
var pattern =/\b[0-9]{10}$\b/;
// the b modifier is used for boundary and $ is used for exact length
Match something non-numeric after the length 10 string. My regex-foo isn't that good, but I think you've got it setup there to catch a numeric string of exactly length 10, but since you don't match anything after that, a length 11 string would also match. Try matching beyond the end of the number and you'll be good.
This should match only 10 digits and allow arbitrary numbers of whitespaces before and after the digits.
Non-capturing version: (only matches, the matched digits are not stored)
^\s*(?:\d{10})\s*$
Capturing version: (the matched digits are available in subgroup 1, as $1 or \1)
^\s*(\d{10})\s*$
You could try alternation?
^\s*(?\d{1,10}|\d{12,})