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

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • JanDoggen

    #1

    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
  • Janwillem Borleffs

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

    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

    Comment

    • Charles Calvert

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

      On Fri, 18 Apr 2008 06:25:45 -0700 (PDT), JanDoggen
      <JanDoggen@plan et.nlwrote in
      <3f6b8dce-7783-43bd-a727-bfebcd333a38@k3 7g2000hsf.googl egroups.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

      Comment

      Working...