• 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

    • "TeamViewer is the fast, simple and friendly solution for remote access over the Internet" Regarding the "friendly" description, has is stopped unceremoniusly booting your session after a couple of minutes accusing you of using it in a commercial environment?!
    • I hate religious supremacist genocidal maniacs. How antisemitic of you to imply that's what all Jews are like. Still no links I see. I guess when you're a zionists, backing your claims with proof doesn't matter. bEliEvE mE oR yOuRe hItLeR.
    • Moto G Stylus has better specs and a stylus. Search for the specs to see if they they're important to you. 
    • Funny how people who don't use OneDrive feel the need to give their opinion.
    • Win11Debloat 06.10.2026 by Razvan Serea Win11Debloat is a lightweight, easy to use PowerShell script that allows you to quickly declutter and customize your Windows experience. It can remove pre-installed bloatware apps, disable telemetry, remove intrusive interface elements and much more. The script also includes many features that system administrators and power users will enjoy. Such as a powerful command-line interface, support for Windows Audit mode and the option to make changes to other Windows users. All changes made by Win11Debloat can be easily reversed, and most removed apps can be restored via the Microsoft Store. A full guide on how to undo the changes is available here. Win11Debloat features: Below is an overview of the key features and functionality offered by Win11Debloat. Please refer to the wiki for more information about the default settings preset. Remove a wide variety of preinstalled apps. Click here for more info. Disable telemetry, diagnostic data, activity history, app-launch tracking & targeted ads. Disable tips, tricks, suggestions & ads across Windows. Disable Windows location services & app location access. Disable Find My Device location tracking. Disable 'Windows Spotlight' and tips & tricks on the lock screen. Disable 'Windows Spotlight' desktop background option. Disable ads, suggestions and the MSN news feed in Microsoft Edge. Hide Microsoft 365 ads on the Settings 'Home' page, or hide the 'Home' page entirely. Disable & remove Microsoft Copilot. Disable Windows Recall. Disable Click to Do, AI text & image analysis tool. Prevent AI service (WSAIFabricSvc) from starting automatically. Disable AI Features in Edge. Disable AI Features in Paint. Disable AI Features in Notepad. Disable the Drag Tray for sharing & moving files. Restore the old Windows 10 style context menu. Turn off Enhance Pointer Precision, also known as mouse acceleration. Disable the Sticky Keys keyboard shortcut. Disable Storage Sense automatic disk cleanup. Disable fast start-up to ensure a full shutdown. ...and more. Once you’ve downloaded the Win11Debloat file (Get.ps1), just follow these quick steps: Locate the Get.ps1 script file. Right-click the file and select Run with PowerShell from the context menu. If prompted by User Account Control (UAC), select Yes to grant the script the necessary administrative permissions. Win11Debloat 06.10.2026 release notes: This release brings some long-requested features alongside a host of fixes. For starters, Win11Debloat can now automatically detect previously applied tweaks for the logged-in user. And reverting them is as simple as unchecking the corresponding setting. The script now also fully supports running under the SYSTEM account, which has also made it possible to apply changes to users who are still logged in. This makes it far easier to integrate Win11Debloat into your automations and deployments. What's changed: Add confirmation dialogs & warning for Windows Terminal Removal by @Raphire Add Support for running the script under SYSTEM account by @soccerzockt in #609 With this, support was also added for applying changes to users that are still logged-in. Add option to show & undo previously applied tweaks by @Raphire in #599 Add additional options to change the All Apps view in the start menu (Hide, Grid, Category, List) by @Raphire in #599 Clean up logging of exceptions during Appx Package uninstallation via Write-Verbose by @HetCreep in #617 Improve log output in Get.ps1/Get-Dev.ps1 and clean up file exclusions by @Raphire Remove RemoveCommApps and RemoveW11Outlook app removal parameters. Use -RemoveApps parameter instead by @Raphire in #599 Resolve nested quoting bug in Run.bat when path has spaces, see #583 by @Raphire in #599 Fix desync issue when toggling "Only Show Installed" checkbox too fast by @Raphire in #599 Fix: add missing keys in Sysprep/Undo regfiles for Disabling Recall and Windows Suggested content by @Raphire in #599 Fix 'Disable Animations' Sysprep settings not being set for new users by @Raphire in #599 Fix typo in Disable_Game_Bar_Integration Sysprep registry file by @Raphire Note The -RemoveCommApps and -RemoveW11Outlook command-line parameters for uninstalling a few specific apps have been removed with this release. If you previously relied on these parameters, please see this wiki page for alternative methods of removing these apps. Download: Win11Debloat 06.10.2026 | Open Source View: Win11Debloat Home Page | Screenshots 1| 2 Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Popular Contributors

    1. 1
      +primortal
      508
    2. 2
      PsYcHoKiLLa
      207
    3. 3
      +Edouard
      156
    4. 4
      Steven P.
      89
    5. 5
      ATLien_0
      79
  • Tell a friend

    Love Neowin? Tell a friend!