> -----Original Message-----
> From: Paul Novitski [mailto:[EMAIL PROTECTED]
> Sent: January 22, 2007 6:58 PM
> To: PHP
> Subject: Re: [PHP] preg_match problem
>
> At 1/22/2007 03:04 PM, Beauford wrote:
> >I'm trying to get this but not quite there. I want to allow the
> >following characters.
> >
> >[EMAIL PROTECTED]&()*;:_.'/\ and a space.
> >
> >Is there a special order these need to be in or escaped somehow. For
> >example, if I just allow _' the ' is fine, if I add the other
> >characters, the ' gets preceded by a \ and an error is
> returned. If I
> >take the ' out of the sting below it works fine, I get no errors
> >returned. I am also using stripslashes on the variable.
> >
> >This is my code. (although I have tried various things with
> it trying
> >to get it right)
> >
> >if(preg_match("/[EMAIL PROTECTED]&\(\)\*;:_.\'\$ ]+$/", $string)) {
>
>
> Please read this page:
>
> Pattern Syntax -- Describes PCRE regex syntax
> http://ca.php.net/manual/en/reference.pcre.pattern.syntax.php
>
> specifically the section on character classes:
> http://ca.php.net/manual/en/reference.pcre.pattern.syntax.php#
> regexp.reference.squarebrackets
>
> In PREG there are few characters that you need to escape in a
> character class expression:
>
> 1) ^ must be escaped (\^) if it's the first character (it
> negates the match when it's unescaped in the first position).
>
> 2) ] must be escaped (\]) unless it's the first character of
> the class (it closes the class if it appears later and is not
> escaped).
>
> 3) \ must be escaped (\\) if you're referring to the
> backslash character rather than using backslash to escape
> another character.
>
> 4) Control codes such as \b for backspace (not to be confused
> with \b which means word boundary outside of a character class).
>
>
> In addition, you may need to escape certain characters in PHP if
> you're expressing the RegExp pattern in a quoted string, such as
> single or double quotes (whichever you're using to quote the pattern):
>
> '[\'"]' escape the apostophe
> "['\"]" escape the quotation mark
>
> Those are PHP escapes -- by the time PREG sees the pattern, the PHP
> compiler has rendered it to:
>
> ['"]
>
> And then of course there's the complication that both PREG and PHP
> use the backslash as the escape character, so the pattern:
>
> [\\] escape the backslash
>
> must be expressed in PHP as:
>
> [\\\\] escape the escape and the backslash
>
> Interestingly, PHP compiles both \\\ and \\\\ as \\, go figure. I
> use \\\\ to escape both backslashes to maintain some semblance of
> logic and order in these eye-crossing expressions.
>
> Because PHP requires quotes to be escaped, I find it easier to write
> & debug patterns in PHP if I express them in heredoc where quoting
> and most escaping is unnecessary:
>
> $sPattern = <<<_
> ['"\\\\]
> _;
>
> becomes the PREG pattern ['"\\].
>
>
> So to address your character class:
>
> >[EMAIL PROTECTED]&()*;:_.'/\ and a space.
>
> I'd use the pattern:
>
> [EMAIL PROTECTED]&()*;:_.'/\\ ]
>
> where the only character I need to escape is the backslash itself.
>
> In PHP this would be:
>
> $sPattern = '[EMAIL PROTECTED]&()*;:_.\'/\\\\ ]';
> (escaped apostrophe & blackslash)
> or:
> $sPattern = "[EMAIL PROTECTED]&()*;:_.'/\\\\ ]";
> (escaped blackslash)
> or:
> $sPattern = <<<_
> [EMAIL PROTECTED]&()*;:_.'/\\\\ ]
> _;
> (escaped blackslash)
I've probably read 100 pages on this, and no matter what I try it doesn't
work. Including all of what you suggested above - is my PHP possessed?
if(preg_match("/[EMAIL PROTECTED]&()*;:_.'/\\ ]+$/", $string)) { gives me
this error.
Warning: preg_match() [function.preg-match]: Unknown modifier '\' in
/constants.php on line 107
So if If you wouldn't mind, could you show me exactly what I need right from
the beginning and explain why it works.
i.e.
if(preg_match(what goes here", $string)) {
Echo "You got it";
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php