On Thu, 27 Jan 2005 16:56:05 +0100, Zouari Fourat <[EMAIL PROTECTED]> wrote:
> > this is working fine :
> > if (eregi("^-?([1-3])+$",$x)
> >  echo "x is 1 or 2 or 3";
> 
> i forgot to say that doesnt work with 1-20 :(
> how to do it ?

You're far better off doing it arithmetically as someone already said,
however  if you absolutely *have* to use a regexp then this is how you
go about it:

You need to match these possible variations:
1. the number '20'
2. the number '1' followed by any digit between 0 and 9.
3. any digit between 1 and 9.

the pattern for the first one is easy. it's just a fixed string: 20
the pattern for the second is only slightly harder: 1[0-9]
the pattern for the third is: [1-9]

You want to match any of them, so you join them together with an
alternation operator, the '|' symbol to get: 20|1[0-9]|[1-9]

This will match any string that contains the numbers 1-20, such as
'200'. To make sure it only matches exactly the numbers you're
interested in, you have to "anchor" the start and finish ending up
with this:

if (preg_match('/^(20|1[0-9]|1-9])$/', $candidate)) {
   // $candidate is a decimal integer between 1 and 20 inclusive with
no leading zeros.
}

 -robin

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to