Re: Splitting a string ...
[email protected] (Al)
| Newsgroups | php.general |
|---|---|
| Message-ID | <[email protected]> |
On 3/14/2010 9:54 PM, Ashley M. Kirchner wrote: > I'm not a regexp person (wish I was though), and I'm hoping someone can give > me a hand here. Consider the following strings: > > > > - domain\[email protected] > > - domain\username > > - the same as above but with / instead of \ (hey, it happens) > > - [email protected] > > - username > > > > Essentially I have a sign-up form where folks will be typing in their > username. The problem is, in our organization, when you tell someone to > enter their username, it could end up being any of the above examples > because they're used to a domain log in procedure where in some cases they > type the whole thing, in other cases just the e-mail, or sometimes just the > username. > > > > So what I'd like is a way to capture just the 'username' part, regardless of > what other pieces they put in. In the past I would write a rather > inefficient split() routine and eventually get what I need. With split() > getting deprecated, I figured I may as well start looking into how to do it > properly. There's preg_split(), str_split(), explode() . possibly others. > > > > So, what's the proper way to do this? How can I capture just the part I > need, regardless of how they typed it in? > > > > Thanks! > > > > A > > The basic problem is that the slashes are legitimate characters for usernames per the RFC 5322; http://en.wikipedia.org/wiki/E-mail_address However, per the "Notwithstanding the addresses permitted by these standards...." paragraph, I disallow the "! # $ % * / ? ^ ` { | } ~" and have not found a problem. You didn't mention whether you had control over the whole submission process. If so, I'd suggest checking the submitted address and sending back to the client a message asking them to correct their submission and resending it. You can check for any of the above characters and bounce the submission back to the client. Check out filter_var($emailAddr, FILTER_VALIDATE_EMAIL) It will catch a lot of errors. Also, you'll find the helpful preg_match("%[[:alnum:][:punct:]]%", $addr); These are legit characters. First remove everything following the @ and the @ itself. Obviously, you can use if(!preg_match....) to catch anything not valid. There are several str functions that'll do it or simply preg_replace("%@.*%", '', $addr)