Jump to content

preg_match


wolves

Recommended Posts

[!--quoteo(post=356939:date=Mar 21 2006, 01:00 PM:name=wolves)--][div class=\'quotetop\']QUOTE(wolves @ Mar 21 2006, 01:00 PM) [snapback]356939[/snapback][/div][div class=\'quotemain\'][!--quotec--]
I'm trying to use, preg_match to find a string like this

'01/01/05'

so I'm using preg_match('/[0-9]{2}\/[0-9]{2}\/[0-9]{2}/', '01/01/05' );

but If I pass '01/01/2005' preg math returns true :(
[/quote]

that's because it's actually finding exactly what youre after, regardless of what's contained each side of it.
when you run the above preg_match, what it sees/finds is: 01/01/20 , which actually meets the criteria you've set it.
all you can really do is test for whitespace after the date (or an end of line) or just validate the results when you have them to make sure that the date was entered in 2digit year format.

Cheers
Mark
Link to comment
Share on other sites

yes but it IS true. preg_match will use your pattern to find something ANYWHERE within a give string. so your match is actually matching correctly, and ignoring the 05 bit of your '2005' and matching with '01/01/20' which fits your criteria. you could put 2000000532 as the year, and it'd still come back true.

try it:
[code]
echo 'matching 01/01/2005:<br>';
$match = preg_match('/[0-9]{2}\/[0-9]{2}\/[0-9]{2}/', '01/01/2005', $matches);
print_r($matches);

echo '<br><br>Matching 01/01/12547612345:<br>';
$match = preg_match('/[0-9]{2}\/[0-9]{2}\/[0-9]{2}/', '01/01/12547612345', $matches);
print_r($matches);
[/code]

both of which will come back true. the first will show '01/01/20' as a match, the second will show '01/01/12' as a match.

Cheers
Link to comment
Share on other sites

[!--quoteo(post=356952:date=Mar 21 2006, 01:27 PM:name=wolves)--][div class=\'quotetop\']QUOTE(wolves @ Mar 21 2006, 01:27 PM) [snapback]356952[/snapback][/div][div class=\'quotemain\'][!--quotec--]
humn, I think I understood;

but how to match only if the year have to digits only?
[/quote]

hmmm someone else will need to help on this one, but you basically need to test for an end character (such as a space, new line, etc. can't quite remember what the character is. something like:

[code]
$match = preg_match('/[0-9]{2}\/[0-9]{2}\/[0-9]{2}[\ \n\r]/', '01/01/2005', $matches);
[/code]

may work but i'm sure there's a better way to check for the end of line. either way, you just have to check for a non-numerical character DIRECTLY after your year.

[b]EDIT:[/b] the bit i added is [\ \n\r] - the 'space' does not appear clearly in my code snippet.
Link to comment
Share on other sites

[!--quoteo(post=356960:date=Mar 21 2006, 01:44 PM:name=wolves)--][div class=\'quotetop\']QUOTE(wolves @ Mar 21 2006, 01:44 PM) [snapback]356960[/snapback][/div][div class=\'quotemain\'][!--quotec--]
I can be the last char of the memory? I don't know if preg_math serachs at the memory...

what char is the last of a string in the memory?
[/quote]

i'm honestly not sure. there's a special character used to match any whitespace character, regardless. if someone else can tell you what it is, that'll be what you need.
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.