اعتبار سنجی فرم ها با عبارات منظم در PHP

daskhatmin فواد طهماسبی
50,573 بازدید
اعتبار سنجی فرم ها با عبارات منظم در PHP

یکی از مهمترین قسمتهای برنامه نویسی وب با PHP، اعتبار سنجی و کنترل داده های ورودی توسط کاربر است؛ فرم ها، اصلی ترین ابزار برقراری ارتباط با کاربران سایت میباشند و اطمینان از اینکه کاربر فرم را در قالب صحیح پر کرده باشد از مشکلات آتی جلوگیری میکند. علاوه بر این در مواقعی، فردی که فرم را پر میکند، لزوما کاربر اصلی سایت نیست و هدفی به غیر از هدف اصلی فرم دارد. باید توجه داشت که اگر داده های ورودی از فرم ها به خوبی بررسی و پاکسازی نشوند، میتوانند به عنوان مهمترین وسیله نفوذ به سیستم تلقی شوند. برای جلوگیری از این مسائل باید داده های ورودی از فرم ها را قبل از پردازش و ارسال به پایگاه داده، بررسی  و پاکسازی کنیم. استفاده از عبارات منظم (Regular Expressions) میتواند برای این موضوع مناسب باشد، که در زیر به انواع داده های فرم و نحوه اعتبار سنجی آن توسط عبارات منظم در PHP اشاره شده است:

 

1- اعتبار سنجی و پاکسازی و بررسی وجود ایمیل با PHP

 
اعتبار سنجی فرم ایمیل:
اعتبار سنجی فرم ایمیل را میوانید به 3 روشی که در زیراشاره میشود انجام دهید. اولین روش به این صورت است:

function isValidEmail($email){
        return eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$', $email);
}

یک روش بهتر هم هست که میتوانید ازآن استفاده کنید:

function isValidEmail($email){
        return preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i', $email);
}

و اگر از PHP 5.2 به بالا استفاده میکنید میتوانید از این روش فرم ایمیل رو اعتبار سنجی کنید:

function fnValidateEmail($email)
{
  return filter_var($email, FILTER_VALIDATE_EMAIL);
}

 

پاکسازی ایمیل:
ما حتی میتوانیم برای اطمینان بیشتر ایمیل گرفته شده را پاکسازی کنیم:

function fnSanitizeEmaill($string) {
     return  preg_replace( '((?:\n|\r|\t|%0A|%0D|%08|%09)+)i' , '', $string );
}

و یا در PHP 5.2 به بالا از روش زیر برای پاکسازی استفاده کنید:

function fnSanitizeEmaill($url)
{
  return filter_var($url, FILTER_SANITIZE_EMAIL);
}

 

بررسی وجود ایمیل با php :
این کار امکان پذیر نیست ولی میشود تا حد زیادی با بررسی دامنه ایمیل از وجود آن مطلع شد:

function check_email($email)
{
        $email_error = false;
        $Email = htmlspecialchars(stripslashes(strip_tags(trim($email)))); //parse unnecessary characters to prevent exploits
        if ($Email == '') { email_error = true; }
        elseif (!eregi('^([a-zA-Z0-9._-])+@([a-zA-Z0-9._-])+\.([a-zA-Z0-9._-])([a-zA-Z0-9._-])+', $Email)) { email_error = true; }
        else {
        list($Email, $domain) = split('@', $Email, 2);
                if (! checkdnsrr($domain, 'MX')) { email_error = true; }
                else {
                $array = array($Email, $domain);
                $Email = implode('@', $array);
                }
        }

        if (email_error) { return false; } else{return true;}
}

 

2 – اعتبار سنجی و پاکسازی اعداد با PHP

اعتبار سنجی اعداد:
برای بررسی اعداد در یک فرم میتوانیم از توابع داخلی PHP استفاده کنیم:

function fnValidateNumber($value)
{
        #is_ double($value);
        #is_ float($value);
        #is_ int($value);
        #is_ integer($value);
        return is_numeric($value);
}

و در PHP 5.2 وبالاتر به این شکل عمل میکنیم:

function fnValidateNumber($value)
{
        #return filter_var($value, FILTER_VALIDATE_FLOAT); // float
        return filter_var($value, FILTER_VALIDATE_INT); # int
}

 

پاکسازی اعداد:
با استفاده از تابع زیر میتوانیم اعداد داخل فرم را پاکسازی کنیم:

function fnSanitizeNumber($str)
{
        #letters and space only
        return preg_match('/[^0-9]/', '', $str);
}

و در  PHP 5.2 به بالا:

function fnSanitizeNumber($value)
{
        #return filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT); // float
        return filter_var($value, FILTER_SANITIZE_NUMBER_INT); # int
}

 

 3 – اعتبار سنجی و پاکسازی رشته ها در PHP

 
اعتبار سنجی رشته ها:
بیشتر در اعتبار سنجی نام و نام خانوادگی و .. به کار میرود و فقط حروف و فاصله را قبول میکند:

function fnValidateStringr($str)
{
        #letters and space only
        return preg_match('/^[A-Za-z\s ]+$/', $str);
}

 

پاکسازی رشته ها:
برای پاک کردن فرم از کاراکترهای غیر رشته ای به کار میرود:

function fnSanitizeStringr($str)
{
        #letters and space only
        return preg_replace('/[^A-Za-z\s ]/', '', $str);
}

در PHP 5.2 و بالاتر میتوان از توابع قدرتمند داخلی PHP استفاده کرد:

function fnSanitizeStringr($str)
{
        return filter_var($str, FILTER_SANITIZE_STRIPPED); # only 'String' is allowed eg. '<br>HELLO</br>' => 'HELLO'
}

 

4 – اعتبار سنجی و پاکسازی اعداد و حروف در PHP:

 

اعتبار سنجی اعداد و حروف:
تابع زیر فرم را بررسی میکند تا فقط حروف و اعداد به کار رفته باشد:

function fnValidateAlphanumeric($string)
{
        return ctype_alnum ($string);
}

 

پاکسازی حروف و اعداد:
با تابع زیر میتوان داده گرفته شده از فرم را پاکسازی کرد به طوری که فقط حروف و اعداد باقی بمانند،  به این صورت که کارکترهایی مانند (! و @ و ؟ و…) حذف میشوند:

function fnSanitizeAlphanumeric($string)
{
        return preg_replace('/[^a-zA-Z0-9]/', '', $string);
}

 

5 – اعتبار سنجی و پاکسازی و بررسی وجود URL در PHP

 
 اعتبار سنجی URL:
تابع زیر از صحیح بودن فرمت آدرس URL اطمینان حاصل میکند:

function fnValidateUrl($url){
return preg_match('/^(http(s?):\/\/|ftp:\/\/{1})((\w+\.){1,})\w{2,}$/i', $url);
}

و در PHP 5.2 به بالا به صورت:

function fnValidateUrl($url)
{
  return filter_var($url, FILTER_VALIDATE_URL);
}

 

پاکسازی URL:
در PHP 5.2 به بالا به صورت زیر است:

function fnSanitizeUrl($url)
{
  return filter_var($url, FILTER_SANITIZE_URL);
}

 

بررسی وجود URL:
با تابع زیر میتوانید از وجود یک url اطمینان حاصل کنید:

function url_exist($url)
{
        $url = @parse_url($url);

        if (!$url)
        {
                return false;
        }

        $url = array_map('trim', $url);
        $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
        $path = (isset($url['path'])) ? $url['path'] : '';

        if ($path == '')
        {
                $path = '/';
        }

        $path .= (isset($url['query'])) ? '?$url[query]' : '';

        if (isset($url['host']) AND $url['host'] != @gethostbyname($url['host']))
        {
                if (PHP_VERSION >= 5)
                {
                        $headers = @get_headers('$url[scheme]://$url[host]:$url[port]$path');
                }
                else
                {
                        $fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);

                        if (!$fp)
                        {
                                return false;
                        }
                        fputs($fp, 'HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n');
                        $headers = fread($fp, 4096);
                        fclose($fp);
                }
                $headers = (is_array($headers)) ? implode('\n', $headers) : $headers;
                return (bool)preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers);
        }
        return false;
}

 
بررسی وجود عکس در URL:
با تابع زیر میتونید متوجه بشوید که در Url گرفته شده عکسی وجود دارد یا خیر:

function image_exist($url) {
if(@file_get_contents($url,0,NULL,0,1)){return 1;}else{ return 0;}
}

 

6 – اعتبار سنجی آدرس IP در PHP

تابع زیر آدرس IP خاصی را بررسی میکند:

function fnValidateIP($IP){
        return preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',$IP)
}

و در PHP 5.2 و بالاتر:

function fnValidateIP($ip)
{
  return filter_var($ip, FILTER_VALIDATE_IP);
}

 

7 – اعتبار سنجی نام کاربری در PHP:

قبل از مقایسه نام کاربری در پایگاه داده از این اعتبار سنجی برای کمتر کردن فشار بر روی پایگاه داده استفاده میشود:

function fnValidateUsername($username){
        #alphabet, digit, @, _ and . are allow. Minimum 6 character. Maximum 50 characters (email address may be more)
        return preg_match('/^[a-zA-Z\d_@.]{6,50}$/i', $username);
}

 

8 – اعتبار سنجی امنیت رمز عبور در PHP

برای بررسی امنیت رمزعبور داده شده توسط کاربر میتوانید از تابع زیر استفاده کنید که بررسی میکند تا رمز عبور حداقل 8 کاراکتر تشکیل شود واز حروف بزرگ و کوچک و اعداد نیز استفاده کند.

function fnValidatePassword($password){
        #must contain 8 characters, 1 uppercase, 1 lowercase and 1 number
        return preg_match('/^(?=^.{8,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$/', $password);
}

 

9 – اعتبار سنجی تاریخ در PHP

اعتبار سنجی تاریخ با فرمت “MM-DD-YYYY” یا “MM-DD-YY” از 0000 تا 9999 :

function fnValidateDate($date){
        #05/12/2109
        #05-12-0009
        #05.12.9909
        #05.12.99
        return preg_match('/^((0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.][0-9]?[0-9]?[0-9]{2})*$/', $date);
}

اعتبار سنجی تاریخ با فرمت “YYYY-DD-MM” یا “YY-MM-DD” از 0000 تا 9999 :

function fnValidateDate($date){
        #2009/12/11
        #2009-12-11
        #2009.12.11
        #09.12.11
        return preg_match('#^([0-9]?[0-9]?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01]))*$#'', $date);
}

 

10 – اعتبار سنجی کدپستی برای ایران در PHP

با تابع زیر میتوانید از صحیح بودن قالب بندی کد پستی اطمینان حاصل کنید:

function fnValidateIRPostal($postalcode){
        #eg. 56789-01234
        return preg_match('/^([0-9]{5})(-[0-9]{5})?$/i',$postalcode);
}

 

11 – ایمن سازی و پاکسازی Query و Data قبل از ارسال به پایگاه داده در PHP

تابع زیر داده های ما را برای جلوگیری از Sql Injection پاکسازی میکند:

function _clean($str){
return is_array($str) ? array_map('_clean', $str) : str_replace('\\', '\\\\', htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES));
}

//usage call it somewhere in beginning of your script
_clean($_POST);
_clean($_GET);
_clean($_REQUEST);// and so on..

و این تابع از حملات XSS و JS و Sql Injection با پاک کردن تگها جلوگیری میکند:

function _clean($str){
return is_array($str) ? array_map('_clean', $str) : str_replace('\\', '\\\\', strip_tags(trim(htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES))));
}

//usage call it somewhere in beginning of your script
_clean($_POST);
_clean($_GET);
_clean($_REQUEST);// and so on..

 


برگرفته از: Hungred

daskhatmin

فواد طهماسبی

فواد طهماسبی هستم، موسس وبسایت آموزشی دسخط. چندین سال تجربه کاری مرتبط با تکنولوژیهای توسعه وب دارم. علاقمند به ایده پردازی و توسعه کسب و کارهای اینترنتی هستم.

45 دیدگاه برای “اعتبار سنجی فرم ها با عبارات منظم در PHP”

  1. رامین گفت:

    سلام
    میشه کمی در مورد این کاراکترها توضیح بدین که کارشون چیه ؟
    /^
    +$/u

    1. سلام
      کاراکتر های / اول و آخر الگو میاد برای اینکه مشخص کنیم بین این دو کاراکتر، الگوی ما ( یا همون pattern) هست.
      کاراکتر ^ برای اینکه بگیم شروع عبارت باید اینطوری باشه.
      کاراکتر $ برای اینکه بگیم پایان عبارت باید به این شکل باشه.
      کاراکتر + یعنی کاراکترهای (بازه) قبلی باید حداقل یکبار یا بیشتر تکرار بشه.
      کاراکتر u بهش گفته میشه flag و مشخص میکنه که الگوی ما دارای یونیکد هست.

      1. رامین گفت:

        جای سوالی نزاشتین. سپاسگزارم از سرعت پاسخگوییتون

  2. ٌصدرا گفت:

    من میخواستم برای ورود نام و نام خانوادگی فرمم رو بررسی کنم که شامل حروف فارسی هم بشه و همینطور انگلیسی که شما انگلیسی رو توضیح دادین! چطور میتونم حروف الفبای فارسی هم بررسی کنم و به این کاراکترها هم امکان استفاده توی فرمم رو بدم؟

    1. سلام، اینو امتحان کنید.
      لطفا نتیجه رو هم به ما بگید. ممنون 🙂

         
       preg_match('/^[\x{600}-\x{6FF} A-Za-z]+$/u', 'متن شما')
       

      1. ٌصدرا گفت:

        اینطور که معلومه درست داره کار میکنه *ـ*
        فقط اگه میشد یه مقدار راجع به نحوه ی عملکردش هم توضیح میدادین ممنون میشدم. اینکه چطور اون اعداد وی به کاراکترهای فارسی دسترسی پیدا میکنن.
        ممنون از راهنمایتون.

    2. در استاندارد یونیکد حروف فارسی زیر مجموعه حروف عربی هستند و کاری که ما انجام دادیم گفتیم که از یونیکد U+0600 تا یونیکد U+6FF (که برای حروف عربی هستند) مجاز باشند.

      این لینک رو مطالعه بفرمایید: https://unicode-table.com/en/blocks/arabic

      1. در حالت محدودتر میتونید به اینشکل بنویسید:

           
         preg_match('/^[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنهیئؤ A-Za-z]+$/u', 'متن شما')
         

      2. صدرا گفت:

        بسیار عالی! سعی کردم همچین متدی رو حدس بزنم فقط بین حروف از اسپیس استفاده کرده بود و جواب نگرفتم. لینکی که فرستادید هم خیلی مفید بود.
        خیلی خیلی از وقتی که گذاشتید ممنونم.

  3. مهران گفت:

    چطور فیلد های خالی رو چک کنیم بعد پیام مناسبو رو صفحه چاپ کنیم مثلا بگیم نام کاربری نمیتواند خالی باشد…………….تو گوگل کلی گشتم اصلا به این اشاره ای نشده

  4. فاطمه عارفی گفت:

    با سلام کد php که نمرات درسی فقط و فقط عدد وارد شود و بین 0 تا 20 باشد .
    با تشکر…

  5. شادی گفت:

    برای طراحی صفحه تغییر پسورد سایتی که دارم می سازم مشکل دارم
    لطفا اگر میتونید کمکم کنید…..

  6. shadi گفت:

    با کدنویسی php یعنی نمیشه وقتی کاربر داره یه فیلدو پر میکنه اگر نادرست باشه ارور بده؟؟؟
    مثلا شماره موبایلو 5555اینجوری وارد کنه بهش ارور بده یا تاریخو یا …

    1. فؤاد طهماسبی گفت:

      چرا نمیشه! خب همین مطلب داره این کار رو توضیح میده!

  7. shadi گفت:

    این مطلبو که عرض کردید میدونم ولی منظورم اینکه قطعه کدی که مثلا برا اعتبارسنجی تاریخ هستش رو باید توی یک فایل جدا با پسوند php بذارم یا تو همون فایلی که میخوام برا صفحه ش اعتبار سنجی کنم؟اگه تو همون فایله ، باید تو تگ هد بذارمش یا تو تگ بادی یا تو قسمت فرم یا کلا قبل تگ html بذارم یا ….؟

    1. فؤاد طهماسبی گفت:

      حتما پردازش های php رو قبل از شروع html بنویسید. هم میتونید تو فایل جدا بنویسید و اینجا include کنید و هم میتونید هم اینجا بنویسید. این بستگی به روش برنامه نویسی شما داره.

  8. shadi گفت:

    لطفا برای اعتبار سنجی اینکه ورودی یک تکست فیلد حتما به زبان فارسی باشه یا حتما به زبان انگلیسی باشه هم کمکمون کنید
    ممنون

  9. shadi گفت:

    سلام
    من با دریم ویور کار میی کنم و بیشترم کدهام به زبان phpهست ولی برای اعتبارسنجی بیشتر از جاوااسکریپت استفاده کردم
    میخوام کمکم کنید تا بدونم این کدارو کجای کدام باید قرار بدم.مثلا اعتبارسنجی تاریخو میخوام استفاده کنم کدارو کجا قرارش بدم
    لطفا راهنماییم کنید
    ممنون

    1. فؤاد طهماسبی گفت:

      سلام،
      ای کدها به صورت php و سمت سرور اجرا میشه. یعنی شما قبل از استفاده این ورودی ها باید اعتبار سنجی کنید اگر درست بود استفاده کنید، اگر نه خطا بده.

  10. عباسی گفت:

    درود بر شما
    بسیار عالی بود موفق و پیروز باشید

  11. طاهره گفت:

    سلام
    میخام اعتبارسنجی چندتا textbox نام و نام خانوادگی به زبان فارسی و کد ملی رو بدون استفاده از تگ فرم با زبان جاوا اسکریپت انجام بدم لطفا راهنماییم کنید.
    کلا با عبارت های منظم توی جاوا اسکریپت نمی تونم کار کنم

  12. محمد گفت:

    واقعا عالی بود ، کفم برید !!!

  13. مجید گفت:

    با سلام
    من آشنایی مختصری با برنامه نویسی تحت وب دارم
    میخواهم یک برنامه تحت وب بنویسم که یک سری اطلاعات رو ثبت کنه و بعداً گزارش گیری بشه.
    تو برخی کدها نیاز به کمک دارم .
    چطور میتونم از راهنمائیهای شما بهره مند بشم ؟

    1. فؤاد طهماسبی گفت:

      اگر امکانش هست تو انجمن مطرح بشه که بقیه هم استفاده کنند بهتر میشه.
      ولی اگر این امکان نیست و دوست ندارید، من ایمیل میزنم به شما که با اون در ارتباط باشیم. اینطوری خوبه؟:D

  14. sadad گفت:

    سلام. خسته نباشید.
    خوشحالم که با سایت شما آشنا شدم
    مشکل من نوشتن فانکشنی است که هم اعتبارسنجی موبایل رو داشته باشه و هم از تکراری بودن او تو فرم جلوگیری کنه. این کار رو میخوام واسه فرم ساز rsform جوملا داشته باشم.
    باید دوباره یادآوری کنم که هر دوکار رو باهم انجام بده.
    پیشاپیش از راهنمایی شما بسیار ممنونم.

    1. فؤاد طهماسبی گفت:

      سلام،
      دوست عزیز من با این افزونه کار نکردم ولی کد php که شاید کمکتون کنه رو مینویسم:

      < ?php
      $phone=array(
      	"09121112233",//valid
          "09121112233",//valid
          "09201112233",//valid
          "09211112233",//valid
          "09301112233",//valid
          "09311112233",//valid
          "09321112233",//valid
          "0939111223321",//not valid
          "09501112233",//not valid
          "234234234234"//not valid
          );
      foreach($phone as $value){
          if(preg_match("/^(09([1-3]{1}[0-9]{1})([0-9]{7}))*$/", $value)) {
              echo $value." => valid
      "; }else{ echo $value." => notvalid
      "; } } ?>

      کد بالا برای موبایلها بود. برای تشخیص تکراری بودن شماره هم میتونید با php عمل مقایسه انجام بدید. یعنی شرطی بگذارید که اگر دو فیلد مورد نظر معتبر بودن دوباره مقایسه بشه که اگر مساوی نبودند کاری که مد نظر شماست رو انجام بده. مثلا:

      function validateMobileNumber($number){
          if(preg_match("/^(09([1-3]{1}[0-9]{1})([0-9]{7}))*$/", $number)){
              return true;
          }
      }
      if(validateMobileNumber($numberOne) && validateMobileNumber($numberTwo) && ($numberOne != $numberTwo) ){
      
      // کاری که شما دوستداری بکنی ;)
      }
      
      

  15. مرتضی گفت:

    سلام آقای طهماسبی

    من یه فرم ساختم که اطلاعات رو به SQL میفرسته. برای جلوگیری از حملات XSS و JS و Sql Injection با پاک کردن تگها, چجوری باید از اون تابه آخری استفاده کنم ؟
    من اصلا php کار نکردم. از جاهای مختلف کد پیدا کردم و موفق به ارسال اطلاعات فرم به SQL شدم.
    استفاده از این تابع که تو سایت گذاشتین رو بلد نیستم.
    اگه امکان داره راهنماییم کنید.
    با تشکر فراوان :X

    1. فؤاد طهماسبی گفت:

      سلام، این مطلب رو بخونید:
      https://daskhat.ir/46/security-tips-php-first

  16. عباس اقا گفت:

    خیلی ممنون بابت مطالب
    دمتونم گرم

  17. مریم گفت:

    سلام .مطالب رو خیلی خوب عنوان کردیداستفاده کردم
    سپاسگذارم

  18. سارا گفت:

    سلام ممکنه یه کتاب خوب در زمینه اموزش php به من معرفی کنید

    1. فؤاد طهماسبی گفت:

      سلام،
      اگر مبتدی هستید و میخواهید از ابتدا با php آشنا بشید بهتره از کتابهایی با عنوان مرجع کامل استفاده کنید. ولی بهترین پیشنهاد من وبسایت w3school.com هست.
      در صورتی که با php آشنایی دارید و میخواهید بیشتر با ترفندها و روشهای پیاده سازی آشنا شده و تمرین کنید. انتشارات wrox.com و dummies.com بهترین پیشنهاد کتاب میتونه باشه. کتب این انتشارات در ایران نیز ترجمه و چاپ شده.(من شخصا چند کتاب فارسی از هر دو انتشارات دارم.) خوبی این کتابها اینه که آموزش همراه با پروژه است.
      و این که ببخشید دیر جواب دادم.

  19. فرهاد گفت:

    سلام ممنون که جواب دادین امکانش هست ایمیلتون رو بدید که من یه چندتا اعتبارسنجی که نوشتم رو بفرستم براتون ببین درسته یا نه؟ممنون.

    1. فؤاد طهماسبی گفت:

      براتون ایمیل زدم. ولی خوب خیلی راحت میتونید خودتون تست کنید. مثل کدی که در کامنت قبلی نوشتم.

  20. فرهاد گفت:

    سلام ممکنه در خصوص اعتبارسنجی زیر کمک کنید؟ممنون
    شماره تلفن هر یک از دانشجویان شامل کد شهر بوده و دارای قالبی مشابه با یکی از شماره تلفنهای زیر
    باشد
    805-6559 (541)
    (541) 805 6559 برعکسه!
    541 805 6559برعکسه از آخر به اول
    805-6559 541
    541-805-6559

    1. فؤاد طهماسبی گفت:

      سلام، چند روش برای این کار هست که بهترینش حذف تمام کاراکترها از اعداد هست. تو این روش کاراکترها رو از ورودی حذف و ذخیره میکنید و هنگام نمایش هرطور که مایل بودید نمایش میدید.
      در مورد ساختار شماره تلفنهایی هم که گفتید میشه با کد زیر اعتبار سنجی کرد:

      $phone=array(
      	"(541) 805-6559",//valid
      	"(541) 805 6559",//valid
      	"541-805-6559",//valid
      	"541-805 6559",//valid
      	"541 805-6559",//valid
      	"541 805 6559",//valid
      	"541-8056559",//valid
      	
      	"5418056559",//not valid
      	"541 (805) 6559",//not valid
      	"541 805 (6559)",//not valid
      	"541/805/6559" //not valid
      	);
      foreach($phone as $value){
      	if(preg_match("/^(([(]{0,1}[0-9]{3}[)]{0,1})[- ]([0-9]{3})[- ]{0,1}([0-9]{4}))*$/", $value)) {
      		echo $value." => valid
      "; }else{ echo $value." => notvalid
      "; }

دیدگاه‌های بیشتر

*اگر پرسشی دارید که مربوط به این مطلب نیست لطفا در بخش پرسشها مطرح کنید. در غیر این صورت دیدگاه شما تایید نخواهد شد.


کد HTMLCSSJavaScriptPHP