شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30

اعتبارسنجی همزمان فرم با ای جکس (Ajax) و PHP

ajax-php-validation

استفاده از ای جکس (Ajax) به جهت قابلیت منحصر به فرد آن یعنی عدم نیاز به بارگذاری مجدد صفحه وب و رفرش کامل می تواند در بسیاری از مواقع و بنا بر نیاز برنامه نویسان کاربردی و رهگشا باشد، یکی از این موارد اعتبارسنجی فرم های وب پیش از ارسال و حین تکمیل است، همان طور که می دانیم اعتبارسنجی به فرآیند بررسی معتبر بودن داده های ارائه شده توسط کاربر یا تطبیق آنها با الگوهای مورد انتظار گفته می شود که در مجموع در دو حالت سمت کاربر (در مرورگر و با زبان هایی مانند جاوا اسکریپت) یا سمت سرور (در سرور و با زبان های سمت سرور مانند PHP، ASP.NET، Python و...) انجام می شود، اما استفاده از Ajax قابلیت دیگری نیز در اختیارمان قرار می دهد و آن بررسی همزمان فرم های وب در سمت سرور بدون رفرش یا نیاز به بارگذاری مجدد صفحات در سمت کاربر است، به این صورت داده ها حین تکمیل فرم به سرور ارسال، اعتبارسنجی شده و در نهایت پاسخ در سمت کاربر دریافت و نمایش داده شده یا پردازش می شوند.

کد ای جکس (Ajax) برای ارسال اطلاعات فرم


برای ارسال اطلاعات فرم قبل از هر چیز باید موتور پایه مبتنی بر ای جکس (Ajax) را برنامه نویسی کنیم، همان طور که در آموزش های مقدماتی دیدیم درخواست های ای جکس مبتنی بر آبجکت XMLHttpRequest (برای تمام مرورگرها به جزء نسخه های قدیمی اینترنت اکسپلورر) یا ActiveXObject (برای اینترنت اکسپلورر نسخه 7 و ماقبل) هستند، بر همین مبنا در نمونه کد زیر ابتدا با دستورات جاوا اسکریپت اطلاعات فیلدهای فرم دریافت و به سرور ارسال می شوند، پس از ارسال درخواست و تا زمان بازگشت پاسخ از سرور پیام یا تصویری مبنی بر درحال پردازش بودن درخواست نمایش داده و در نهایت پاسخ سرور را تجزیه تحلیل یا در بلاک div خروجی می دهیم:
<script>
function ajaxRequest(input_name, input_value, div_id){
    var form_value = input_name + "=" + input_value;
    var loading_message = '<img src="loading.gif" alt="loading" height="16" width="16"> لطفا کمی صبر کنید...';    
    var xmlhttp;

    if(window.XMLHttpRequest){
        //IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        //IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState < 4){
            document.getElementById(div_id).innerHTML = loading_message;
        } else if(xmlhttp.readyState === 4 && xmlhttp.status === 200){
            document.getElementById(div_id).innerHTML = xmlhttp.responseText;
        }
    }
    
    xmlhttp.open("POST","ajax-validate.php", true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send(form_value);
}
</script>
توضیح:
- تابع اصلی کد ajaxRequest (نام دلخواه) است و از سه آرگیومنت استفاده می کند که به ترتیب شامل نام فیلد مورد نظر، مقادیر و آی دی فیلد می شوند، این آرگیومنت ها در قسمت های مختلف تابع استفاده شده اند.
- در متغیر form_value پارامتر و مقادیر را برای ارسال از طریق متد xmlhttp.send آماده می کنیم، به طور مثال اگر input_name برابر usertext باشد و input_value برابر 1، مقادیر متغیر form_value به صورت usertext=1 خواهد بود، به این صورت در سمت سرور می توانیم اطلاعات را با متد POST دریافت کنیم، به طور مثال:
<?php
$usertext = $_POST['usertext'];
?>
- متغیر loading_message برای نمایش تصویر و پیام "در حال پردازش ..." یا "لطفا کمی صبر کنید..." در حالتی که xmlhttp.readyState < 4 است استفاده می شود.
- با توجه به تنظیمات قسمت xmlhttp.open اطلاعات فیلدهای فرم با متد POST به فایل ajax-validate.php ارسال می شوند.
- در نهایت نیز پاسخ سرور با متد responseText دریافت و با innerHTML در بلاک div هدف (که آی دی آن را با آرگیومنت div_id دریافت کرده ایم) خروجی داده می شود.

نحوه استفاده و فراخوانی تابع ای جکس


برای اینکه موتور ای جکس ما به کار بیفتد لازم است که با استفاده از رویدادهای جاوا اسکریپتی نظیر onkeyup یا onchange تابع را فراخوانی کنیم، در نمونه کدهای زیر از رویداد onchange بدین منظور استفاده کرده ایم:
<form action="ajax-validate.php" method="post">
<label for="usertext">اعتبار سنجی عدد بودن مقادیر:</label><br>
<input type="text" name="usertext" id="usertext" dir="ltr" onchange="ajaxRequest('usertext', this.value, 'showresult-1');">
<div class="inline" id="showresult-1"></div>
<br><br>
<label for="usermail">اعتبار سنجی معتبر بودن ایمیل:</label><br>
<input type="text" name="usermail" id="usermail" dir="ltr" onchange="ajaxRequest('usermail', this.value, 'showresult-2');">
<div class="inline" id="showresult-2"></div>
<br><br>
<label for="usersite">اعتبار سنجی معتبر بودن آدرس سایت:</label><br>
<input type="text" name="usersite" id="usersite" dir="ltr" onchange="ajaxRequest('usersite', this.value, 'showresult-3');">
<div class="inline" id="showresult-3"></div>
</form>
توضیح:
- همان طور که گفتیم برای هر فیلد تابع ajaxRequest را با سه آرگیومنت متفاوت فراخوانی می کنیم که آرگیومنت اول نام فیلد، آرگیومنت دوم مقادیر فیلد و آرگیومنت سوم آی دی بلاک div است که قصد داریم نتیجه را در آن نمایش دهیم، به این صورت مواد اولیه به تابع داده شده و تابع پس از آماده سازی پارامترها و مقادیر درخواست را به سرور ارسال می کند، در نهایت پاسخ سرور در بلاک div (که آی دی آن را با آرگیومنت div_id تنظیم کرده ایم) خروجی داده می شود.
- در این مثال از رویداد onchange استفاده کرده ایم که بنا به نیاز می توانیم از سایر رویدادها مانند onkeyup، onblur، onfocus و... نیز استفاده کنیم.

کد PHP برای پردازش اطلاعات ارسالی


با توجه به هدفمان از اعتبارسنجی شکل برنامه نویسی سمت سرور نیز متفاوت خواهد بود، برای نمونه در مثال زیر سه فیلد را از لحاظ اینکه مقادیر ارسال شده عدد، آدرس ایمیل معتبر و یا آدرس وبسایت یا وبلاگ باشد بررسی و نتیجه را چاپ کرده ایم:
<?php
@$usertext = $_POST['usertext'];
@$usermail = $_POST['usermail'];
@$usersite = $_POST['usersite'];

if(isset($usertext) && is_numeric($usertext)){
    echo '<div class="result-true">عبارت وارد شده یک عدد است!</div>';
} elseif(isset($usertext) && !is_numeric($usertext)){
    echo '<div class="result-false">عبارت وارد شده یک عدد نیست!</div>';    
}

if(isset($usermail) && preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i", $usermail) > 0){
    echo '<div class="result-true">ایمیل وارد شده معتبر است!</div>';
} elseif(isset($usermail) && preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i", $usermail) == 0){
    echo '<div class="result-false">ایمیل وارد شده معتبر نیست!</div>';    
}

if(isset($usersite) && preg_match("/^\S+\.\S+.+$/i", $usersite) > 0){
    echo '<div class="result-true">آدرس سایت وارد شده معتبر است!</div>';
} elseif(isset($usersite) && preg_match("/^\S+\.\S+.+$/i", $usersite) == 0){
    echo '<div class="result-false">آدرس سایت وارد شده معتبر نیست!</div>';
}
?>
توضیح:
- متغیر usertext به لحاظ اینکه یک مقدار عددی باشد یا خیر بررسی می شود، در این بررسی از تابع is_numeric در PHP استفاده کرده ایم.
- متغیر usermail به لحاظ اینکه آدرس ایمیل معتبر باشد بررسی می شود، در اینجا از تابع preg_match و یک الگو بر اساس عبارات باقاعده (Regular Expression) استفاده کرده ایم.
- متغیر usersite نیز به لحاظ پیروی کردن از الگوی صحیح آدرس وبسایت بررسی می شود، در اینجا نیز از تابع preg_match و الگو بر اساس عبارات باقاعده (Regular Expression) استفاده کرده ایم.
نکته 1: تابع preg_match با توجه به الگوی در نظر گرفته شده رشته ارسالی را بررسی می کند، اگر مقادیر ارسال شده مطابق با الگو باشد، مقدار 1 (یا true) و در غیر این صورت مقدار 0 (یا false) را برمی گرداند.
نکته 2: علامت @ در ابتدای متغیرها برای جلوگیری از نمایش خطاها و نادیده گرفته شدن آنها در PHP است.

کد و پیش نمایش آنلاین


در ادامه کد نهایی و پیش نمایش آنلاین اعتبارسنجی همزمان فیلدهای فرم با ای جکس (Ajax) و PHP را جهت تست و بررسی بیشتر درج کرده ایم:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | اعتبارسنجی فرم های وب با ای جکس</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 12px;
    direction: rtl;
}
.inline {
    display: inline-block;
}
.result-true {
    color: #090;
}
.result-false {
    color: #C00;
}
</style>
<script>
function ajaxRequest(input_name, input_value, div_id){
    var form_value = input_name + "=" + input_value;
    var loading_message = '<img src="loading.gif" alt="loading" height="16" width="16"> لطفا کمی صبر کنید...';    
    var xmlhttp;

    if(window.XMLHttpRequest){
        //IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        //IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState < 4){
            document.getElementById(div_id).innerHTML = loading_message;
        } else if(xmlhttp.readyState === 4 && xmlhttp.status === 200){
            document.getElementById(div_id).innerHTML = xmlhttp.responseText;
        }
    }
    
    xmlhttp.open("POST","ajax-validate.php", true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send(form_value);
}
</script>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیرفعال است یا پشتیبانی نمی شود!<br>
</noscript>

<form action="ajax-validate.php" method="post">
<label for="usertext">اعتبار سنجی عدد بودن مقادیر:</label><br>
<input type="text" name="usertext" id="usertext" dir="ltr" onchange="ajaxRequest('usertext', this.value, 'showresult-1');">
<div class="inline" id="showresult-1"></div>
<br><br>
<label for="usermail">اعتبار سنجی معتبر بودن ایمیل:</label><br>
<input type="text" name="usermail" id="usermail" dir="ltr" onchange="ajaxRequest('usermail', this.value, 'showresult-2');">
<div class="inline" id="showresult-2"></div>
<br><br>
<label for="usersite">اعتبار سنجی معتبر بودن آدرس سایت:</label><br>
<input type="text" name="usersite" id="usersite" dir="ltr" onchange="ajaxRequest('usersite', this.value, 'showresult-3');">
<div class="inline" id="showresult-3"></div>
</form>
<br>
<hr>
پس از تایپ یک عبارت در هر فیلد، در فیلد بعدی یا فضای خالی صفحه کلیک کنید تا رویداد onchange اجرا شود.
</body>
</html>
پیش نمایش آنلاین
دسته بندی: آموزش کاربردی » Ajax
related مطالب بیشتر:
ساخت قابلیت امتیازدهی با PHP و Ajax
آموزش نحوه آپلود فایل با PHP و ای جکس (Ajax)
نمایش داینامیک و صفحه به صفحه مطالب با ای جکس (Ajax)
لیست داینامیک پیشنهاد کلمات، مبتنی بر ای جکس، PHP و MySQL
ارسال اطلاعات فرم با ای جکس (Ajax) و نمایش پیام در حال پردازش
دیدگاه
more ۳۵ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
محمد مهدی
۱۱:۱۶ ۱۳۹۲/۰۵/۲۹
فوق العاده عالی البته این برنامه رو من با جی کوئری انجام دادم و فوق العاده کاربردی هست
اعتبارسنجی به تنهایی با ایجکس یا php معایبی داره که این مشکل با اعتبارسنجی همزمان حل شده
بسیار عالی
ممنون از محبتتون
۰۸:۰۲ ۱۳۹۲/۰۵/۲۷
سلام من می خوام در فرم ثبت نام فیلد پسورد از لحاظ سختی کلمه عبور بسنجم تقریبا چیزی شبیه سی پنل که وقتی رمز رو عوض می کنی درجه سختی رمز عبور رو نشون میده لطفا این اموزش رو بزارید.
سلام
این گونه موارد نیازمند نوشتن الگوریتم ها و توابعی (با PHP یا JavaScript) است تا تمام موارد را به صورت هوشمندانه سنجش کند، هر چند انتشار این آموزش در کوتاه مدت میسر نیست، اما ممکن است در آینده آموزشی در این رابطه منتشر کنیم.
یحیی
۱۷:۳۲ ۱۳۹۲/۰۴/۰۹
با تشکر از پاسخ سریعتون
کد جاوا اسکریپت مربوطه رو کاملا متوجهم اما کجا باید پاسخ سرور رو تجزیه تحلیل کنم و کد جاوا رو کجا به کار ببرم. مثلا من میخوام در صورت داشتن خطا یه پیام خطا ارائه بشه و با صحیح بودن، رنگ فیلد سبز بشه.
دقیقتر بگم. میخواهم برای ارسال فرم از یه رویداد onclick استفاده کرده و با جاوا رنگ فیلدها رو چک کنم که اگه رنگ همه فیلدها مثلا سبز نباشه از ارسال فرم جلوگیری بشه.
ممکن هست یا نه ؟
درضمن "معرکه و محشرید" متشکر
به نظر شما اعتبار سنجی سمت سرور و سمت کاربر را با هم اشتباه گرفته اید! هنگامی که از شیوه مبتنی بر آژاکس (Ajax) استفاده می کنیم، یعنی اعتبار سنجی در سرور (کدهای PHP) انجام و پاسخ به مرورگر ارسال می شود، این پاسخ در قسمت
xmlhttp.responseText
قرار دارد که متناسب با هدف ما می تواند هر چیزی باشد، به فرض اعدادی از 0 تا 3، سپس در تابع آژاکسی می توان این مقدار را به فرض به یک متغیر نسب داد و متغیر را در یک شرط if و else یا switch و case سنجید، به طور مثال:
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var element_id = 'input_id';
var response = xmlhttp.responseText;
switch(response){
case '0':
document.getElementById(element_id).style.borderColor = '#FF0000';
break;
case '1':
//
break;
case '2':
//
break;

}
}
در واقع اعتبار سنجی اصلی در سرور انجام می شود، به هر صورت به نظر منظور شما اعتبارسنجی سمت کاربر توسط جاوا اسکریپت است که در این صورت آموزش جداگانه ای برای آن در سایت وجود دارد، عبارت "اعتبار سنجی" را در قسمت جستجو وارد کنید.
یحیی
۱۴:۰۲ ۱۳۹۲/۰۴/۰۹
با عرض سلام و خسته نباشید.
میخواستم بدونم آیا میشه به همراه بازخورد از طرف پی اچ پی،
border-color
مربوط به فیلد هم تغییر کنه. مثلا اگه پیغام خطا داشته باشه رنگ کادر فیلد قرمز و اگه درست باشه رنگ کادر فیلد سبز بشه.
سلام
بله، این کار با دستورات جاوا اسکریپتی امکان پذیر است، به طور مثال:
var element_id = 'input_id';
document.getElementById(element_id).style.borderColor = '#FF0000';
می توانید در سمت کاربر پاسخ سرور را به یک آرایه تجزیه کنید ، یا به فرض به صورت عدد 0 و 1 نتیجه را برگردانید و با دستورات شرطی آن را تحلیل کرده و متناسب با نتیجه، رفتاری منطقی برای کدهای خود تعریف کنید.
nekoee
۱۳:۴۳ ۱۳۹۲/۰۴/۰۴
سلام
کاش میشد این مطالب رو برای وبلاگ نویس ها هم آموزش بدین
ما که سرور php نداریم
من فرم html رو طراحی کردم
php رم طراحی کردم
ولی نمیدونم الان تو اکشن html آدرس php اعتبار سنجی رو چطور وارد کنم؟
php رو آپلود کردم و ادرسش رو گذاشتم تو اکشن html ولی نمیشه کار نمیکنه :(
سلام
همان طور که اشاره کردید، برای اجرای فایل های PHP نیاز به یک سرور است، نمی توانید فایل های سمت سرور که به زبان PHP، ASP و... هستند را در سرویس های معمولی اجرا کنید! به عبارت دیگر سرویس های وبلاگی این امکان را ندارند که کدهای PHP را پشتیبانی کنند، یا باید هاست خریداری کنید یا از سرویس های رایگان با قابلیت پشتیبانی PHP استفاده کنید.
ابوالفضل
۰۲:۱۵ ۱۳۹۲/۰۴/۰۳
بابا دمتون گرم خیلی واضح و مفید توضیح میدین
علی
۱۱:۳۵ ۱۳۹۱/۱۱/۱۱
سلام اگه بخوایم وقتی رو دکمه ارسال کلیک کردیم مثلآ بگه فیلد نام کاربری نباید خالی باشد. باید چی کار کنیم؟ مرسی
سلام
برای این موارد باید از اعتبار سنجی جاوا اسکریپت استفاده کنید که در بخش آموزش های کاربردی توضیح داده شده است.
مهرداد
۲۱:۲۲ ۱۳۹۱/۱۱/۰۹
سلام مرسی عالی بود
فقط با این مثال اگه فرممون submit داشته باشه میره به صفحه validate و همون متن های اون صفحه مثل " عبارت وارد شده یک عدد نیست! " چاپ میشه! اما من نمیخوام به هیچ صفحه ای بره باید چی کار کنم! تشکر
سلام
آژاکس به تنهایی نمی تواند مانع ارسال فرم شود، باید از جاوا اسکریپت و رویداد onsubmit نیز استفاده کنید، جهت آشنایی بیشتر به مطلبی با عنوان "اعتبار سنجی فرم های وب با جاوا اسکریپت" در قسمت آموزش های کاربردی جاوا اسکریپت مراجعه کنید.
مهسا
۱۶:۱۵ ۱۳۹۱/۱۰/۳۰
با تشکر از سایت مختصر و مفیدتون
حیاتی
۱۰:۰۲ ۱۳۹۱/۱۰/۱۰
ممنون از پاسختون. ولی در مورد سوال اول منظورم فرستادن مقدار فیلد پسورد هنگام تغییر فیلد تکرار پسورد است. یعنی بعد از عبارت onchange در فیلد تکرار پسورد چه عبارتی بنویسیم که علاوه بر مقدار همین فیلد مقدار فیلد پسورد رو هم به تابع بفرسته؟ بازم ممنون از لطفتون.
برای این کار باید هم زمان مقادیر دو فیلد را ارسال کنید، این کار چندان سخت نیست، کافی است به فرض در تابع AjaxRequest با دستورات شرطی if بررسی کنید، اگر inputname برابر نام فیلد تکرار کلمه عبور بود، یک پارامتر دیگر به متغیر formvalue اضافه کنید (که این پارامتر مقادیر فیلد کلمه عبور را هم به سرور ارسال کنید) و در غیر این صورت پارامتر دوم خالی باشد، مثال:
	if(inputname == 'userpass_confirm'){
var userpass = "&userpass="+document.getElementById('userpass').value;
}
else{
var userpass = '';
}
var formvalue = inputname+"="+inputvalue.value+userpass;
به این ترتیب هر زمان بر روی فیلد userpass_confirm رویداد onchange اجرا شود، تابع مقادیر فیلد userpass را هم به سرور ارسال می کند.
حیاتی
۱۴:۵۸ ۱۳۹۱/۱۰/۰۹
- اگر بخواهیم همزمان دو فیلد پسورد و تکرار پسورد با هم مقایسه شوند باید چه کدی بنویسیم؟ - اگر بخواهیم پسورد کمتر از مثلا شش کاراکتر نباشد چطور؟
برای مقایسه مقادیر دو فیلد، آنها را در دو متغیر بریزید و با یک دستور شرطی if بررسی کنید، به فرض:
if($pass === $pass_confirm){
echo 'کلمه عبور با تکرار آن همخوانی دارد';
}
برای بررسی میزان کاراکتر یک رشته نیز از strlen و نمونه کد زیر استفاده کنید:
$strlen = strlen($pass);
if($strlen <= 5){
echo 'کلمه عبور نباید کمتر از 6 کاراکتر باشد';
}
محمد
۱۲:۲۶ ۱۳۹۱/۱۰/۰۹
لطفا کد اعتبارسنجی حروف فارسی رو هم بنویسید چون وقتی مثلا نام کاریری رو به فارسی وارد کنیم مینویسه که نامعتبر است.
برای نام کاربری بهتر است تنها از کاراکترهای انگلیسی استفاده شود، با این حال دو روش زیر می توانند کمک کنند، در روش اول که طولانی تر است می توانیم یک تابع دلخواه برای حروف فارسی بنویسیم:
<?php
function strSplitUTF8($str) {
$split = 1;
@$array = array();
for($i = 0; $i < strlen($str);) {
$value = ord($str[$i]);
if($value > 127) {
if($value >= 192 && $value <= 223)
$split = 2;
elseif($value >= 224 && $value <= 239)
$split = 3;
elseif($value >= 240 && $value <= 247)
$split = 4;
} else {
$split = 1;
}
$key = null;
for($j = 0; $j < $split; $j++, $i++) {
$key .= $str[$i];
}
array_push($array, $key);
}
return $array;
}

function isPersian($str) {
/* function by: http://webgoo.ir */
$persian_status = true;
$str_to_array = strSplitUTF8($str);
foreach($str_to_array as $key => $value) {
if($value == ' ') {
unset($str_to_array[$key]);
}
}
$persian_alphabet = array('ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء', 'آ', 'اً', 'َ', 'ِ', 'ًُ', 'ي');
foreach($str_to_array as $key => $value) {
if(!in_array($value, $persian_alphabet)) {
$persian_status = false;
}
}
return $persian_status;
}

//نحوه استفاده
$username = 'نام کاربری';
if(isPersian($username) == true) {
echo 'Valid: این نام کاربری فارسی و قابل ثبت است';
} else {
echo 'Invalid: این نام کاربری فارسی نیست یا دارای کاراکترهای غیر مجاز است';
}
?>
تابع اول برای تجزیه حرف به حرف کلمات فارسی است و در تابع دوم حروف بررسی می شوند، اگر حرفی جزء حروف الفبای فارسی نبود، تابع isPersian مقادیر false را برمی گرداند و اگر کلمه فارسی بود، true را برمی گرداند، به این ترتیب می توانید به کاربران اجازه ثبت نام کاربری فارسی را بدهید.
نکته: برای اینکه کاربران بتوانند هم کاراکترهای انگلیسی و هم فارسی را استفاده کنند، باید از این تابع در کنار سایر روش های اعتبار سنجی استفاده کنید، یعنی کاربر هم مجاز به استفاده از کاراکترهای مجاز انگلیسی باشد و هم فارسی (استفاده ترکیبی مجاز نیست)، به فرض:
if(isset($username) && (preg_match("/^[a-zA-Z0-9]+$/", $username) > 0) || isPersian($username) == true){
echo 'Valid: این نام کاربری قابل ثبت است';
}
روش دوم ساده است و در آن از modifier u استفاده می کنیم:
<?php
$str = 'متن فارسی';
if(preg_match('/^[آ-ی\s]+$/u', $str)){
echo 'Valid' . '<br>';
}
else{
echo 'Invalid' . '<br>';
}
?>
خالدیان
۲۲:۲۳ ۱۳۹۱/۰۹/۲۰
از سایت عالی و بی نظیر شما تشکر می کنم و از زحمات شما بی نهایت تشکر دارم
حبیب
۰۲:۳۲ ۱۳۹۱/۰۹/۰۶
با سلام
میشه کد اعتبار سنجی اینکه فقط استفاده از عدد و حروف مجاز باشه و چیزه دیگه ای مجاز نباشه مثلا ( ' " @ $ % # ) مثلا من یه فرم لوگین می خوام طراحی کنم و از این کد تو اون استفاده کنم اگه میشه برام میل کنین یا تو سایت آموزش بدین
با تشکر
سلام
برای این کار کافی است از تابع preg_match مطابق الگوی زیر استفاده کنید:
preg_match("/^[a-zA-Z0-9]+$/", $username)
اگر رشته ارسالی دارای کاراکتری خارج از 0-9 a-z یا A-Z باشد تابع عدد 0 و در غیر این صورت عدد 1 را برمی گرداند، به طور مثال:
if(isset($username) && preg_match("/^[a-zA-Z0-9]+$/", $username) == 1){
echo "<div class=\"result-true\">نام کاربری وارد شده معتبر است!</div>";
}
elseif(isset($username) && preg_match("/^[a-zA-Z0-9]+$/", $username) == 0){
echo "<div class=\"result-false\">نام کاربری وارد شده معتبر نیست!</div>";
}
البته دقت کنید که در قسمت دریافت متغیرها در php (قسمت POST) و همچنین فرم html موارد مربوط به نام فیلد و آی دی و... را متناسب با نام متغیر جدید (username) تعریف کرده باشید.
حبیب
۰۱:۲۵ ۱۳۹۱/۰۹/۰۴
با سلام
من اعتبار سنجی رو طبق دستور درست کردم همچیش درسته ولی وقتی می خوام که روی گزینه بعد کلیک کنم فرم ها دو تا میشن یعنی عین 3 تا تکست دیگه رو صفحه کپی میشه
سلام
به احتمال زیاد قسمتی را اشتباه انجام داده اید، دقت کنید که نام گذاری فیلد ها و فراخوانی آنها درست و مطابق الگو انجام شده باشد، در واقع مرورگر هیچ کاری را بی علت انجام نمی دهد، باید ببینید کجای کد ایراد دارد، در صورت تمایل می توانید آن را به ایمیل ما بفرستید تا بررسی کنیم.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
6 × 4
20 × 20
=