Подтвердить номер мобильного телефона в формате php

Я хочу проверить номер мобильного телефона на 10 цифр, а также добавить префикс 0 при входе в базу данных.

<?php include ('database_connection.php'); $citystate = $_POST['citystate']; $serviceprovider = $_POST['serviceprovider']; $accept = $_POST['accept']; if (isset($_POST['formsubmitted'])) { $error = array(); //Declare An Array to store any error message if (isset($_POST['checkbox'])) { $mumbai = (in_array("mumbai", $_POST['checkbox']) ? 1 : 0); $pune = (in_array("pune", $_POST['checkbox']) ? 1 : 0); $banglore = (in_array("banglore", $_POST['checkbox']) ? 1 : 0); $mysore = (in_array("mysore", $_POST['checkbox']) ? 1 : 0); } if ($mumbai + $pune + $banglore + $mysore == 0) { $error[] = 'Please check atleast one SMS center'; } if ($accept != 1) { $error[] = 'Please check terms '; } if (empty($_POST['mobileno'])) {//if no name has been supplied $error[] = 'Please Enter a Mobile Number '; //add to array "error" } if (empty($_POST['mobileno'])) {//if no name has been supplied $error[] = 'Please Enter a Mobile Number '; //add to array "error" } else { $mobile = $_POST['mobileno']; //else assign it a variable /* if( preg_match("^[0-9]{10}", $mobile) ){ } else { $error[] = 'Your Mobile No is invalid '; } */ } if (empty($_POST['fname'])) {//if no name has been supplied $error[] = 'Please Enter a First name '; //add to array "error" } else { $fname = $_POST['fname']; //else assign it a variable } if (empty($_POST['lname'])) {//if no name has been supplied $error[] = 'Please Enter a Last name '; //add to array "error" } else { $lname = $_POST['lname']; //else assign it a variable } if (empty($_POST['email'])) { $error[] = 'Please Enter your Email '; } else { if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['email'])) { //regular expression for email validation $email = $_POST['email']; } else { $error[] = 'Your EMail Address is invalid '; } } if (empty($_POST['passwd1'])) { $error[] = 'Please Enter Your Password '; } else { $password = $_POST['passwd1']; } if (empty($_POST['passwd2'])) { $error[] = 'Please Verify Your Password '; } else { $password = $_POST['passwd2']; } if ($_POST["passwd1"] != $_POST["passwd2"]) { $error[] = 'Password does not match'; } if (empty($error)) { //send to Database if there's no error ' //If everything's OK... // Make sure the mobile no is available: $query_verify_mobileno = "SELECT * FROM userdtls WHERE mobileno = '$mobile'"; $result_verify_mobileno = mysqli_query($dbc, $query_verify_mobileno); if (!$result_verify_mobileno) {//if the Query Failed ,similar to if($result_verify_mobileno==false) echo ' Database Error Occured '; } if (mysqli_num_rows($result_verify_mobileno) == 0) { // IF no previous user is using this number . // Create a unique activation code: //$activation = md5(uniqid(rand(), true)); $query_insert_user = "INSERT INTO userdtls ( mobileno, serviceprovider, pass, fname, lname, email, citystate, MUM, PUN, BNG, MYS ) VALUES ( '" . $mobile . "', '" . $serviceprovider . "', '" . $password . "', '" . $fname . "', '" . $lname . "', '" . $email . "', '" . $citystate . "','" . $mumbai . "', '" . $pune . "', '" . $banglore . "', '" . $mysore . "' )"; } } } 

Теперь я застрял в проверке мобильного номера. Я пытался использовать регулярные выражения.

Я хочу добавить 10-значный телефонный номер и убедиться, что это только цифры или дать ошибку, а при вводе номера в базу данных я хочу добавить префикс к номеру мобильного телефона 0, поэтому он должен быть как 0 и10digitnumber

Попробуйте что-то вроде этого:

 $phoneNumber = $_POST['mobileno']; if(!empty($phoneNumber)) // phone number is not empty { if(preg_match('/^\d{10}$/',$phoneNumber)) // phone number is valid { $phoneNumber = '0' . $phoneNumber; // your other code here } else // phone number is not valid { echo 'Phone number invalid !'; } } else // phone number is empty { echo 'You must provid a phone number !'; } 

Вероятно, наиболее эффективной и хорошо читаемой формой будет использование библиотеки libphonenumber от Google. PHP-версия доступна на GitHub . Это может помочь вам не только проверить номер сам, но и проверить код страны с ним или даже узнать, действителен ли какой-либо номер для конкретной страны (эта библиотека знает, какие префиксы номеров действительны для многих стран). Например: 07700 900064 – действительный номер GB, но 09700 900064 нет, даже если они имеют одинаковую длину .

Вот как я могу подтвердить номер мобильного телефона в вашем приложении:

 $phoneNumber = $_POST['mobileno']; $countryCode="GB"; if (!empty($phoneNumber)) { // phone number is not empty $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $mobileNumberProto = $phoneUtil->parse($phoneNumber, $countryCode); if ($phoneUtil->isValidNumber($mobileNumberProto)) { // phone number is valid //here you know that number is valid, let's try to format it without country code but with 0 at the beginning (national number format) $phoneNumber = $mobileNumberProto->format($mobileNumberProto, PhoneNumberFormat::NATIONAL); } else { $error[] = 'Phone number not valid!'; } } else { $error[] = 'You must provide a phone number!'; } 

$countryCode – это два $countryCode кода ISO 3166-1 . Вы можете проверить его для своей страны в Википедии .

Вы пробовали регулярное выражение вроде:

 if( !preg_match("/^([0-1]-)?[0-9]{3}-[0-9]{3}-[0-9]{4}$/i", $phone) ) { echo 'Please enter a valid phone number'; } 

Ну, я опаздываю, чтобы увидеть этот вопрос, и его уже ответили, но у меня есть лучшее решение для этого.

filter_var()

 if (filter_var($int, FILTER_VALIDATE_INT) !== FALSE) { // valid } 

Для индийских мобильных номеров это будет самым простым

 if(is_numeric($num)){ if($num=>1000000000 and $num=<9999999999){ $num="0".$num; } else{ echo "Invalid Mobile Number"; } } else{ echo "Hey Buddy mobile numbers are always in digits"; } 

Эта идея поражает меня из-за желания найти легкость и немного ума, потому что число (1000000000) является самым низким численным значением (10 цифр), а число (9999999999) является самым высоким численным значением, которое может использоваться в качестве мобильного номера в Индии. И еще один код будет работать быстрее, чем другие решения.

 if(!ereg("^[7-9]{1}[0-9]{9}$", $mob)) { return false; } 

Улучшение ответа правинского трипати:

if(!ereg("^[7-9]{1}[0-9]{9}$", $mob)) { return false; }

поскольку ereg () устарел, вы можете использовать

 preg_match("/^[7-9]{1}[0-9]{9}$/i", $mobile_no) 

Это поможет вам подтвердить мобильный номер из Индии, так как они составляют 10 цифр и начинаются с 7, 8 или 9 на сегодняшний день. Вы всегда можете изменить шаблон, если будут введены новые цифры.