Jump to content

[SOLVED] preg match allowing underscore


Recommended Posts

Hi,

 

I'm after what I'm hoping is a quick bit of help. I have the following in my code:

 

preg_match("/[^a-zA-Z0-9]+$/s", $variableName)

 

I got this code from an example which I was lead to believe only allows letters and numbers. However, it is also allowing underscores. Why is it doing this?

 

Thanks,

 

V.

Link to comment
https://forums.phpfreaks.com/topic/182153-solved-preg-match-allowing-underscore/
Share on other sites

"[^a-zA-Z0-9]+$/s"

 

Since $ matches against the end, your code would have only returned an error if there were one or more characters that weren't a-zA-Z0-9 directly before the end of the input.

 

I see. So should removing +$ from the expression, eg. preg_match("/[^a-zA-Z0-9]/s", $variableName) now only allow a-z, A-Z and 0-9 as intended? Or should I continue testing it?

That would depend on how you implement your boolean logic. The most common way (IMO) of ensuring something only contains standard letters and numbers would be.

 

if(preg_match("#^[a-z0-9]+$#i", $input)) {
   echo "Valid";
}

You appear to be doing the opposite...

 

if(preg_match("#[^a-zA-Z0-9]#", $input)) {
   echo "Not Valid";
}

...which should still work.

That would depend on how you implement your boolean logic. The most common way (IMO) of ensuring something only contains standard letters and numbers would be.

 

if(preg_match("#^[a-z0-9]+$#i", $input)) {
   echo "Valid";
}

You appear to be doing the opposite...

 

if(preg_match("#[^a-zA-Z0-9]#", $input)) {
   echo "Not Valid";
}

...which should still work.

 

Hi cags, I've just tried your example and it gives an error if you only use letter and numbers (which is the opposite to what I want). Should there be a ! before preg_match?

Is your code exactly the same as mine? As I said it depends on how you evaluate the value returned by preg_match. The first example I gave will return true if it's a valid string. Hence the fact I check if it's true, then it's valid. The second example will return true if it finds an unwanted character so a returned value of true means it's not valid.

Is your code exactly the same as mine? As I said it depends on how you evaluate the value returned by preg_match. The first example I gave will return true if it's a valid string. Hence the fact I check if it's true, then it's valid. The second example will return true if it finds an unwanted character so a returned value of true means it's not valid.

 

Sorry, cags, my fault. I was looking for it to return an error, so I should have been using the bottom example, not the top one. (I used the top one first, then tried it with a ! before preg_match.)

Yer, placing an exclamation mark before it will obviously flip the result, I guess it depends on how you word the question as to which one is correct. If you consider the topic solved, don't forget to click the 'Topic Solved' button, it appears in the bottom left hand corner of threads you started.

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.