• 0

[PHP] eregi replacement


Question

I've been using this code to validate user names. It only allows 0-9, a-z, A-Z, spaces...

if ( ! eregi ( "^[0-9A-Z_[:space:]]{1,}$", $username ) )

But now, in PHP 5.3 the ereg and eregi functions are deprecated and will be deleted in PHP 6.0.

How can I do this without eregi?

Edited by MNunes2
Link to comment
https://www.neowin.net/forum/topic/815802-php-eregi-replacement/
Share on other sites

15 answers to this question

Recommended Posts

  • 0

you're close. preg_* functions use perl regular expressions so they have a little extra syntax to them.

preg_match("/^[0-9a-z_ ]+$/i", &username)

mainly the starting and ending slash. the letter 'i' after the ending slash says "do a case insensitive search". that way you can remove the extra A-Z character class.

  • 0
you're close. preg_* functions use perl regular expressions so they have a little extra syntax to them.
preg_match("/^[0-9a-z_ ]+$/i", &username)

mainly the starting and ending slash. the letter 'i' after the ending slash says "do a case insensitive search". that way you can remove the extra A-Z character class.

And what does this +$ and this ^ mean? And where can I learn more about this?

  • 0

a carrot (^) means to assert position at the beginning of the string. so basically.. this pattern needs to start at the very beginning of the string.

the dollar sign ($) means assert position at the end of the string. so the strings needs to end with this pattern as well.

the stuff between the square braces are known as a character class. a group of characters that must exist (in this case). if you left the plus off after the character class then that character class would only be required to match one character. the plus means match at least one of the characters in the character class.. but the more it finds in next to each other the more it will match.

so when you put it all together it says that some string must start with and end with some number, letter, space, or any of the symbols (&, #, _) and it must exist at least once but can exist as many times as possible.

if you leave the carrot or dollar sign off of the expression then a pattern could be satisfied anywhere in the string and would be considered a match. for example.. if you used the pattern "[0-9a-z_ ]+" and tested it against the string "abc;.123" it would match two patterns: "abc" and "123". using the dollar sign and carrot it would start matching and get to "abc" then it would see a semicolon and because a semicolon isnt in the character class the pattern fails because the entire string wasnt the match for the pattern.

the key thing to remember is that a regular expression will look for any match that it can find if you dont use constraints like these.

  • 0
a carrot (^) means to assert position at the beginning of the string. so basically.. this pattern needs to start at the very beginning of the string.

the dollar sign ($) means assert position at the end of the string. so the strings needs to end with this pattern as well.

the stuff between the square braces are known as a character class. a group of characters that must exist (in this case). if you left the plus off after the character class then that character class would only be required to match one character. the plus means match at least one of the characters in the character class.. but the more it finds in next to each other the more it will match.

so when you put it all together it says that some string must start with and end with some number, letter, space, or any of the symbols (&, #, _) and it must exist at least once but can exist as many times as possible.

if you leave the carrot or dollar sign off of the expression then a pattern could be satisfied anywhere in the string and would be considered a match. for example.. if you used the pattern "[0-9a-z_ ]+" and tested it against the string "abc;.123" it would match two patterns: "abc" and "123". using the dollar sign and carrot it would start matching and get to "abc" then it would see a semicolon and because a semicolon isnt in the character class the pattern fails because the entire string wasnt the match for the pattern.

the key thing to remember is that a regular expression will look for any match that it can find if you dont use constraints like these.

It's caret. lol

  • 0
It's caret. lol

:rofl: lol my fingers must be hungry

It seems I will have to learn a lot about this function since ereg functions wont be available anymore. :-( Thanks for the information.

i learned mostly from using regex buddy and reading their docs on their site. i think it's a great app for easing into regular expressions and testing/debugged really complex ones even after you get the hang of it.

http://www.regexbuddy.com/regex.html

  • 0

Hi guys,

been a few years since i've used PHP and was testing out some old stuff I had, and came across the depreciated ereg function.

I was using:

if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address))

which I picked up form somewhere, have no idea how it works, and so have no idea how to turn it into preg_match.

Anyone lend a hand? I tried some solutions already in the thread but didn't have much luck.

My function looks like:

function valid_email($address)

{

// check an email address is possibly valid

if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address))

return true;

else

return false;

}

  • 0

I've been using this code to validate user names. It only allows 0-9, a-z, A-Z, spaces...

if ( ! eregi ( "^[0-9A-Z_[:space:]]{1,}$", $username ) )

But now, in PHP 5.3 the ereg and eregi functions are deprecated and will be deleted in PHP 6.0.

How can I do this without eregi?

I've been using the following code to validate Xbox Live Gamertags in a Stats application. (which is A-Z, a-z, 0-9, spaces)

preg_replace('/[^a-zA-Z0-9\s]/', '', $username);

or if you have more descriptive stuff (like can't start/end with space, can't have 2 spaces in a row, can't start in a number, 15 chars long)

preg_replace('/^(?=.{1,15}$)[a-zA-Z][a-zA-Z0-9]*(?: [a-zA-Z0-9]+)*$/', '', $username);

  • 0

Hi guys,

been a few years since i've used PHP and was testing out some old stuff I had, and came across the depreciated ereg function.

I was using:

if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address))

which I picked up form somewhere, have no idea how it works, and so have no idea how to turn it into preg_match.

Anyone lend a hand? I tried some solutions already in the thread but didn't have much luck.

My function looks like:

function valid_email($address)

{

// check an email address is possibly valid

if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address))

return true;

else

return false;

}

Seeing as you're using newer PHP, I'd suggest filter_var

  • 0

If you want to learn about regular expressions then I would suggest reading up on the Perl Regex man page.

A more user friendly website for learning about regex is http://www.regular-expressions.info/, but this teaches PCRE (Perl Compatible Regular Expressions). As the name suggests the two are mostly the same, but there are some minor inconsistencies.

  • 0

I've been using the following code to validate Xbox Live Gamertags in a Stats application. (which is A-Z, a-z, 0-9, spaces)

preg_replace('/[^a-zA-Z0-9\s]/', '', $username);

\s matches all whitespace, not just spaces. It will also match tabs, line feeds, carriage returns, which are clearly not allowed in XBL gamertags :p

If you want to match only spaces then you should use [^a-zA-Z0-9 ].

Also, rather than match a-zA-Z you could use the /i case-insensitive modifier. With the above changes, the final regex would become:

preg_replace('/[^a-z0-9 ]/i','',$username);

Or if you prefer, you can use \d instead of 0-9:

preg_replace('/[^a-z\d ]/i','',$username);

  • 0

Hi guys,

been a few years since i've used PHP and was testing out some old stuff I had, and came across the depreciated ereg function.

I was using:

if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address))

which I picked up form somewhere, have no idea how it works, and so have no idea how to turn it into preg_match.

Anyone lend a hand? I tried some solutions already in the thread but didn't have much luck.

My function looks like:

function valid_email($address)

{

// check an email address is possibly valid

if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address))

return true;

else

return false;

}

function valid_email($address)
{
  // check an email address is possibly valid
  return (preg_match('/^[a-z\d_\.\-]+@([a-z\d\-]+)(?:\.(?1))+$/i',$address)) ? true : false;
}

Your original regex matched things like "[email protected]" which is clearly not a valid email address. This one will not match that.

I'm not a PHP programmer so the above may not work if I've got any of the PHP syntax wrong, but I've tried out the regex in another language and it seems to work :)

Edit:

In fact, if top level domains only ever go two levels deep, like ".co.uk," then this regex is probably more appropriate:

function valid_email($address)
{
  // check an email address is possibly valid
  return (preg_match('/^[a-z\d_\.\-]+@([a-z\d\-]+)(?:\.(?1)){1,2}$/i',$address)) ? true : false;
}

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • EU Commission explains why Siri AI isn't launching in the EU, and Apple is to blame by Hamid Ganji Image via Apple This week at Apple’s 2026 developers conference, the iPhone maker unveiled the upgraded Siri after more than a year of delays. The new Siri is now called Siri AI, and it's powered by Google Gemini models. While Siri AI is preparing to roll out to Apple users worldwide, the company’s EU customers might need to wait much longer before getting their hands on the new assistant. Shortly after announcing iOS 27, Apple said in a blog post that Siri AI is not coming to the EU anytime soon due to hurdles posed by the Digital Markets Act (DMA) and other regulatory requirements. To comply with the DMA in the EU, Apple apparently needs to open Siri AI to rival assistants on iOS 27 and iPadOS 27. Apple has refused to do so, which has resulted in Siri AI being delayed for its EU users. The company argues that such a move would put users’ privacy at risk. In a statement to Neowin, a European Commission spokesperson provided more details about why Siri AI will not be rolled out to Apple customers in the region. The statement first noted that the DMA does not prohibit Apple from launching its services in the EU and that the company is simply required to comply with the law. The European Commission spokesperson added that, since Apple is considered a gatekeeper under the DMA, it is “obliged to give third parties access to equivalent features as they give to its own products. Because the DMA is precisely about giving users the choice to use the product they find best suits their needs.” Moreover, the spokesperson said the Commission has been in contact with Apple, though the company “did not develop proposals for DMA compliant interoperability solutions.” The statement also clarified that companies designated as gatekeepers cannot leverage their status and products, such as operating systems, to favor their own AI services. The first public beta of iOS 27 will roll out next month, while the stable version is expected to launch this fall following the release of the iPhone 18 series. It remains unclear when Apple will be able to resolve its DMA-related compliance issues with the European Commission and bring Siri AI to its European customers.
    • i wish i could uninstall Chrome from Anrdoid...  
    • XMedia Recode 3.6.3.1 by Razvan Serea XMedia Recode is a free video and audio converter. XMedia Recode supports nearly all audio and video codecs. With XMedia Recode you can easily convert nearly all film and music files in the format you want. Convert for countless devices, select the predefined profile (iPhone, iPad, iPod Touch, Android-Tablets, Sony PSP, Amazon Kindle, Smartphones Blackberry, Wii und DS, Cowon, Android, HTC, Xbox360, Samsung, LG). XMedia Recode converts: 3GP in AVI, 3GP in FLV, AC3 in MP3, AC3 in WAV, ASF in 3GP, ASF in FLV, ASF in MP4, AVI in FLV, AVI in 3GP, FLAC in MP3, FLAC in WMA, FLV in 3GP, FLV in Mp3, DVD in 3GP, DVD in AC3, DVD in AVI, DVD in MP3, DVD in MP4, DVD in MOV, DVD in SVCD, DVD in VCD, DVD in WMV, OGG in MP3, OGG in WMA, MPEG in AVI, MP2 in MP3, MP4 in FLV, MP4 in AVI, M4P in MP3, MOV in 3GP, MOV in AVI, MOV in FLV, WMA in MP3, WMV in FLV, WAV in MP3. Main functions of XMedia Recode: Extracts audio tracks from DVD, Blu-ray and video files Framework also freely selectable color (Padding) Drag-n-drop of video files directly on the encoder Selection display format (1: 1, 3:2, 4:3, 5:4, 5:6, 11:9,16: 9, 16:10, 2.21: 1) Zoom shot (none, type character box, media, Pan Scan, to screen) ''Direct Stream'' copies the audio stream or video stream into the target format 2-Pass-Encoding Volume correction Can change framerate, bit rate, resolution Can extract audio stream of most video formats Produce DVD copies for mobile phones, various mobile devices Edit Video: Color correction Video cut Cropping Denoise Delogo Deblocking De-interlacing Flip Image Start Time End Time Resolution Rotate Image Sepia Sharpness Padding Video fade in / fade out XMedia Recode 3.6.3.1 changelog: Update of ffmpeg Updated AOM AV1 Codec (3.14.1) Fixed minor bugs Download: XMedia Recode 64-bit | Portable ~20.0 MB (Freeware) Download: XMedia Recode 32-bit | Portable View: XMedia Recode Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • This has been on the roadmap for years, nothing really new here. This is one of the few areas where Microsoft is making Windows better. Universal print is a very good things and so far works as expected. The last step is ending the option for 3rd parties to add traditional custom drivers. It is somewhat of a hurdle, but it is for a long-term good. The downside is that printer manufactures are likely going to use this as an excuse to force users onto new printers. Considering this roadmap has been public for years, then printers sold during that time should be covered...but I'm sure they will have a different opinion.
    • Where are you seeing that? It seems hard to believe considering nothing in the Apple ecosystem gets that level of access, and the same for Android unless you put some kind of custom rooted image on the phone. It just seems like asking for something that hasn't ever been given to anyone, is a stupid strategy; it's going to be an automatic 'no'.
  • Recent Achievements

    • One Month Later
      pinnclepd earned a badge
      One Month Later
    • First Post
      X-No-file earned a badge
      First Post
    • One Month Later
      johnjacobb40 earned a badge
      One Month Later
    • One Year In
      Primer1st earned a badge
      One Year In
    • Experienced
      JayZJay went up a rank
      Experienced
  • Popular Contributors

    1. 1
      +primortal
      506
    2. 2
      PsYcHoKiLLa
      213
    3. 3
      +Edouard
      145
    4. 4
      Steven P.
      86
    5. 5
      ATLien_0
      83
  • Tell a friend

    Love Neowin? Tell a friend!