473,386 Members | 1,693 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

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

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

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
Jun 2 '08 #1
2 4230
JanDoggen schreef:
function vldLicense($lic)
{
echo "called with lic: ". $lic . "<br>";
echo preg_match('[A-Za-z0-9]', $lic) . "<br>";

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
Jun 2 '08 #2
On Fri, 18 Apr 2008 06:25:45 -0700 (PDT), JanDoggen
<Ja*******@planet.nlwrote in
<3f**********************************@k37g2000hsf. googlegroups.com>:
>function vldLicense($lic)
{
echo "called with lic: ". $lic . "<br>";
You can write this as:

echo "called with lic: $lic<br>";

php will replace $lic with the value of the variable. See the
difference between (") and (').
>echo preg_match('[A-Za-z0-9]', $lic) . "<br>";
echo preg_match('/[A-Za-z0-9]/', $lic) . "<br>";

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
Jun 2 '08 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.