• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 870
  • Last Modified:

Phone number Regular Expression Validators

Hi There

I am trying to force a user to insert a number in a specified format.

Our cell numbers in south africa is in the following format
0845678890
I need them to write the number as
+27845678890

I currently have a kasked extender that works like this
<ajaxToolkit:MaskedEditExtender runat="server" ID="mee" ClearMaskOnLostFocus="false" TargetControlID="txtCell" Mask="+27999999999"></ajaxToolkit:MaskedEditExtender>

But the users are still entering the nu,mbers incorrectly.

I need a regular expression that there is no 0 after the 27 and that the amount of digits is 11 exluding the +

Thanks
Stanton


0
Stanton_Roux
Asked:
Stanton_Roux
1 Solution
 
jon47Commented:
A couple of points:
1 - you can't do that with Microsoft's ajax toolkit - the format descriptors aren't rich enough to define something as being 1-9 (and not 0).  You'd get closer with "\+\2\799999999", but this still wouldn't stop people entering +240...
2 - the masked edit extender relies on javascript.  If a user's browser doesn't have javascript, or the user has disabled it, then you get no mask applied anyway.

You'd do better letting your users enter a number in a way that makes sense to /them/, and then parsing the number to get the format /you/ want.  You could do this client-side with javascript, but as per note 2 above you'd have to be able to do it server side as well for non-javascript browsers.

Jon
0
 
copyPasteGhostCommented:
you can use the asp:regular expression control.

Here is the regex you are looking for:

"^[+][2][7][1-9]{8}$"

CPG

0
 
Dushyant SharmaCommented:
You can try this
 \+27[0-9]{9}
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
käµfm³d 👽Commented:
This pattern should suit you:
^(?=\+27[1-9]\d+).{12}$

Open in new window

0
 
Marco GasiFreelancerCommented:
I agree with jon47: let your user type phon number as they wish, post the form and receiving the form formta number as you wish.
Using php you can do this way:

<?php
$phone_number = $_POST['phone_number'];
//$phone_number = "0845678890";
$phone_number = preg_replace("/\b0/", "", $phone_number);
$phone_number = "+27".$phone_number;
if (strlen($phone_number)>12){
    echo "Invalid phone number.";
}else echo $phone_number;
?>
0
 
copyPasteGhostCommented:
I misread your question, I thought you wanted 11 including the + not excluding..

Modification of my previous post:

"^[+][2][7][1-9]{9}$"
0
 
käµfm³d 👽Commented:
@copyPasteGhost

It's a bit redundant to put a single character in a character class--just have the character as the pattern itself. Also, your pattern is omitting zero as a valid number in the phone number. Only the first digit after "27" is not supposed to be zero, unless I am reading the question wrong  :)

I guess in hindsight, the lookahead wasn't really necessary in my post. The pattern could simply be:
^\+27[1-9]\d{8}$

Open in new window

0
 
copyPasteGhostCommented:
Thanks kaufmed. RegEx is something I'm trying to brush up on. (thus why i'm trying to participate is these kind of questions more.

what does
^\+27 mean?

I know ^ is the beginning of the line.

but what does the \ before "+27" do?

thanks.
CPG
0
 
käµfm³d 👽Commented:
Plus (+) is a special character in regex (one-or-more). Since you want to find a literal plus, you have to escape it in the pattern. That is what the backslash does. You don't need to escape it inside of a character class, though, so your usage of it was OK.
0
 
copyPasteGhostCommented:
Ah I see. ok cool thanks.
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now