Robin : $i='2'; if (preg_match('/^(20|1[0-9]|1-9])$/', $i)) { echo 'yes'; }else echo 'no'; stdout: no Marek : $i='02'; if (($i>=1) && ($i<=20) && (eregi('^[0-9]+$', $i))) echo 'yes'; stdout: yes i hate reposting but my problem seems to persist :( sorry. On Thu, 27 Jan 2005 16:28:37 +0000, Robin Vickery <robinv@xxxxxxxxx> wrote: > On Thu, 27 Jan 2005 16:56:05 +0100, Zouari Fourat <fourat@xxxxxxxxx> 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 > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php