Can anyone help me build a regular expression that will find a string of any length containing any characters but must contain 21 commas
Thanks
Can anyone help me build a regular expression that will find a string of any length containing any characters but must contain 21 commas
Thanks
/^([^,]*,){21}[^,]*$/
That is:
^ Start of string
( Start of group
[^,]* Any character except comma, zero or more times
, A comma
){21} End and repeat the group 21 times
[^,]* Any character except comma, zero or more times again
$ End of string
Exactly 21 commas:
^([^,]*,){21}[^,]$
At least 21 commas:
^([^,]?,){21}.*$
if exactly 21:
/^[^,]*(,[^,]*){21}$/
if at least 21:
/(,[^,]*){21}/
However, I would suggest don't use regex for such simple task. Because it's slow.
What language? There's probably a simpler method.
For example...
In CFML, you can just see if ListLen(MyString)
is 22
In Java, you can compare MyString.split(',')
to 22
etc...
Might be faster and more understandable to iterate through the string, count the number of commas found and then compare it to 21.
If you're using a regex variety that supports the Possessive quantifier (e.g. Java), you can do:
^(?:[^,]*+,){21}[^,]*+$
The Possessive quantifier can be better performance than a Greedy quantifier.
Explanation:
(?x) # enables comments, so this whole block can be used in a regex.
^ # start of string
(?: # start non-capturing group
[^,]*+ # as many non-commas as possible, but none required
, # a comma
) # end non-capturing group
{21} # 21 of previous entity (i.e. the group)
[^,]*+ # as many non-commas as possible, but none required
$ # end of string
var valid = ((" " + input + " ").split(",").length == 22);
or...
var valid = 21 == (function(input){
var ret = 0;
for (var i=0; i<input.length; i++)
if (input.substr(i,1) == ",")
ret++;
return ret
})();
Will perform better than...
var valid = (/^([^,]*,){21}[^,]*$/).test(input);