Another preg_match() [function.preg-match]: Unknown modifier "{"

Another preg_match() [function.preg-match]: Unknown modifier "{"

am 18.04.2008 15:25:45 von JanDoggen

function vldLicense($lic)
{
echo "called with lic: ". $lic . "
";
echo preg_match('[A-Za-z0-9]', $lic) . "
";

if (preg_match('[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A -Za-
z0-9]{4}', $lic) == 0) return false;
return true;
}

gives me:

called with lic: 64gd-kwey-t643-ytes
0
Warning: preg_match() [function.preg-match]: Unknown modifier '{'

Why the 0 in the simple match?
Why the unknown modifier in the complex match?

Thanks in advance
Jan

Re: Another preg_match() [function.preg-match]: Unknown modifier"{" ;-)

am 18.04.2008 15:44:11 von Janwillem Borleffs

JanDoggen schreef:
> function vldLicense($lic)
> {
> echo "called with lic: ". $lic . "
";
> echo preg_match('[A-Za-z0-9]', $lic) . "
";
>
> if (preg_match('[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A -Za-
> z0-9]{4}', $lic) == 0) return false;
> return true;
> }
>
> gives me:
>
> called with lic: 64gd-kwey-t643-ytes
> 0
> Warning: preg_match() [function.preg-match]: Unknown modifier '{'
>
> Why the 0 in the simple match?
> Why the unknown modifier in the complex match?
>

In the first call, the square brackets are assumed to be modifiers. If
you would put something behind the character class (e.g.
'[A-Za-z0-9]a'), you will the same compliant pointing at the bracket.


JW

Re: Another preg_match() [function.preg-match]: Unknown modifier "{" ;-)

am 18.04.2008 17:29:21 von Charles Calvert

On Fri, 18 Apr 2008 06:25:45 -0700 (PDT), JanDoggen
wrote in
<3f6b8dce-7783-43bd-a727-bfebcd333a38@k37g2000hsf.googlegroups.com>:

>function vldLicense($lic)
>{
>echo "called with lic: ". $lic . "
";

You can write this as:

echo "called with lic: $lic
";

php will replace $lic with the value of the variable. See the
difference between (") and (').

>echo preg_match('[A-Za-z0-9]', $lic) . "
";

echo preg_match('/[A-Za-z0-9]/', $lic) . "
";

Regexes are required to be bounded by a character. "/" is the usual
character used, but you can use others as well.

> if (preg_match('[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A -Za-
>z0-9]{4}', $lic) == 0) return false;

if (preg_match('/[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[ A-Za-
z0-9]{4}/', $lic) == 0) return false;

Again, put the regex inside of "/".

> return true;
>}
>
>gives me:
>
>called with lic: 64gd-kwey-t643-ytes
>0
>Warning: preg_match() [function.preg-match]: Unknown modifier '{'
>
>Why the 0 in the simple match?

Because preg_match was treating "[]" as the regex bounding characters
instead of the class boundary, so it read "[A-Za-z0-9]" as matching
the literal string "A-Za-z0-9".

>Why the unknown modifier in the complex match?

Same reason. It read the first occurrence of "[A-Za-z0-9]" as the
regex (match literal string "A-Za-z0-9") and then couldn't figure out
what to do with {4}.

--
Charles Calvert | Software Design/Development
Celtic Wolf, Inc. | Project Management
http://www.celticwolf.com/ | Technical Writing
(703) 580-0210 | Research