On Tuesday 02 December 2003 20:41, Lars Thegler wrote: > On Monday, December 01, 2003 11:24 AM, Fergal Daly wrote: > Obviously, if the numbers are of variable length, then we have a different > situation, that cannot easily be handled this way. Maybe I should check $lo > and $hi to ensure they are the same length... It would definitely be a good idea to check that but I was pointing out that the documentation doesn't actually say that the hi and lo must be the same length and also, the numbers you are testing it against must be that length also. > > 2900-3999 into a single regex string which will match if and only > > if the number is in any of the intervals > > > > ^(?:29\d{2}|3\d{3})$ > > Intersting proposistion. Assuming that $lo and $hi are the same length, then > doing > > $n = length($lo)-length($_); > $p .= $n ? "\d{$n}" : ''; > > to each prefix should do the trick. I'll be adding that to the module. Exactly. Actually, if you're going to put in the \d{$n} stuff then you can make this work for arbitrary intervals without any constraints on the length of hi, lo and the number being tested (you must also include ^ and $ in the regex for this to work). So i2p(900, 1999) would give back ^(?:9\d{2}|1\d{3})$ and if your algorithm was really clever i2p(500,5000) would give ^(?:[5-9]\d{2}|[1-5]\d{3})$ but that may not be worth the effort. Also, the regexes involving \d{$n} will actually be slower for your telephone application because you already know that the number is the right length, FThread Previous | Thread Next