Reputation: 113
Trying to create a regex pattern for email address check. That will allow a dot (.) but not if there are more than one next to each other.
Should match: [email protected]
Should not match: [email protected]
Now I know there are thousands of examples on internet for e-mail matching, so please don't post me links with complete solutions, I'm trying to learn here.
Actually the part that interests me the most is just the local part: test.test that should match and test..test that should not match. Thanks for helping out.
Upvotes: 8
Views: 30422
Reputation: 4755
^([^.]+\.?)+@$
That should do for the what comes before the @
, I'll leave the rest for you.
Note that you should optimise it more to avoid other strange character setups, but this seems sufficient in answering what interests you
Don't forget the ^
and $
like I first did :(
Also forgot to slash the .
- silly me
Upvotes: 0
Reputation: 8365
To answer the question in the title, I'd update the RegExp by Junuxx and allow dots in the beginning and end of the string:
'/^\.?([^\.]|([^\.]\.))*$/'
which is optional .
in the beginning followed by any number of non-.
or [non-.
followed by .
].
Upvotes: 0
Reputation: 14281
You may allow any number of [^\.]
(any character except a dot) and [^\.])\.[^\.]
(a dot enclosed by two non-dots) by using a disjunction (the pipe symbol |
) between them and putting the whole thing with *
(any number of those) between ^
and $
so that the entire string consists of those. Here's the code:
$s1 = "[email protected]";
$s2 = "[email protected]";
$pattern = '/^([^\.]|([^\.])\.[^\.])*$/';
echo "$s1: ", preg_match($pattern, $s1),"<p>","$s2: ", preg_match($pattern, $s2);
Yields:
[email protected]: 1
[email protected]: 0
Upvotes: 6
Reputation: 3983
strpos($input,'..') === false
strpos
function is more simple, if `$input' has not '..' your test is success.
Upvotes: 1
Reputation: 16127
This seams more logical to me:
/[^.]([\.])[^.]/
And it's simple. The look-ahead & look-behinds are indeed useful because they don't capture values. But in this case the capture group is only around the middle dot.
Upvotes: 5