اعتبارسنجی (Validation) فرم ها در JavaScript
از JavaScript می توان برای اعتبار سنجی فرم ها، قبل از اینکه به سرور ارسال شود استفاده نمود.
فرم های داده ای که توسط JavaScript اعتبارسنجی می شوند به صورت معمول می تواند شامل موارد زیر باشد:
- آیا فیلدهای الزامی (ستاره دار) پر شده است؟
- آیا کاربر آدرس ایمیل را به فرمت صحیح وارد کرده است؟
- آیا کاربر، داده صحیح را وارد کرده است؟
- آیا کاربر در یک فیلد عددی، فقط کاراکترهای عددی را وارد کرده است؟
فیلدهای الزامی (Required)
تابع زیر، خالی بودن فیلد را چک می کند. اگر خالی باشد، پیغام "First name must be filled out" ظاهر می شود و فرم به سرور ارسال نمی شود:
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
تابع بالا، زمانی فراخوانی می شود که، رویداد "onsubmit" فرم اتفاق بیافتد:
مثال (اعتبارسنجی فرم ها در JavaScript)
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
اعتبار سنجی ایمیل (E-mail Validation)
تابع زیر، فرمت معمول آدرس ایمیل را چک می کند.
فرمت صحیح آدرس ایمیل شامل موارد زیر است:
- باید شامل یک علامت "@" باشد.
- باید حداقل یک نقطه (.) داشته باشد باشد.
- علامت "@" نباید اولین کاراکتر باشد.
- آخرین نقطه، باید بعد از علامت "@" ظاهر شود.
- بعد از آخرین نقطه باید حداقل 2 کاراکتر بیاید.
{
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
{
alert("Not a valid e-mail address");
return false;
}
}
تابع بالا، زمانی فراخوانی می شود که، رویداد "onsubmit" فرم اتفاق بیافتد:
مثال (اعتبارسنجی فرم ها در JavaScript)
Email: <input type="text" name="email">
<input type="submit" value="Submit">
</form>
beyamooz.com/try_it_yourself/tryit.php?filename=js_validat-old
در قسمت اعتبار سنجی ایمیل شرط if رو متوجه نشدم
ممنون میشم توضیح مختصری در این مورد بدید
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
{
alert("Not a valid e-mail address");
return false;
}
در کدهای بالا، در خط اول، متغیر atpos اندیس علامت @ را در رشته ی ایمیل وارد شده به دست می آورد. و در خط دوم، متغیر dotpos اندیس
آخرین نقطه ی درون رشته ی ایمیل را به دست می آورد.
در خط سوم، یعنی همان دستور if، همان طور که می دانید علامت || به معنی "یا" است. و در شرط دستور if چند سه شرط وجود داره که اگه هرکدوم
از اونها برقرار باشن، ایمیل داده شده معتبر نیست. و یک پیغام خطا نشون داده میشه و مقدار false برگردونده میشه. که عبارتند از:
1. عبارت atpos<1 اگه true باشه یعنی اندیس علامت @ برابر با 0 است و یعنی این علامت در ابتدای آدرس ایمیل قرار داره که یک خطا هست.
2. عبارت dotpos<atpos+2 یعنی آخرین نقطه ی آدرس ایمیل، قبل از علامت @ باشه. که یک خطا هست(به مورد شماره 4 در توضیحات دقت کنید).
3. عبارت dotpos+2>=x.length یعنی آخرین نقطه ی ایمیل اگر حداقل دو کاراکتر قبل از انتهای ایمیل نبود، مقدار false را نشان بده که خطا تولید
شود. در حقیقت باید dotpos<x.length-2 باشد. یعنی نقطه ی ما، دو کاراکتر قبل از انتهای ایمیل باشد.
لطفا میشه جواب سوالمو بدید
تو اعتبارسنجی ایمیل atpos و dotpos که تو کد اومدن چین؟ توضیح میشه بدین؟ متوجه نشدم و به توضیحات نیاز دارم چون دقیقا رو این موضوع گیر کردم.
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
چطور میشه تعداد کاکتر هایی رو که توی پنجره باز شده مینویسیم سنجید؟
میخوام بدونم الان این درس رو درست متوجه شدم یا خیر.
ویژگی onsubmit به همراه تگ form میاد و کارش اینه که وقتی کلید ارسال اطلاعات رو میزنیم یک تابع اسکریپتی رو فراخوانی کنه. این تابع هم دو تا کار میتونه انجام بده:
1- پیغامی رو بعد از ارسال اطلاعات به کاربر بده که معمولا پیغام ارسال موفقیت آمیز اطلاعات هست.
2-اطلاعات رو قبل از ارسال چک کنه تا در صورت درست بودن اطلاعات اونها رو ارسال کنه.
مورد اول که چیز خاصی نداشت. اما مورد دوم ویژگی onsubmit تابع مورد نظر رو با کلمه return آورده. از اونجایی که تابع ذکر شده در مثال خروجیش مقدار true یا false هست ، آیا به کار بردن این ویژگی به صورت onsubmit="return validateFom()" p به این معنی میشه که مقدار نهایی این تابع اگر true باشد فرم ارسال گردد و اگر false باشه فرم ارسال نشه؟ یعنی میخوام کاربرد کلمه return رو در ویژگی onsubmit مطمعن بشم که کاربردش چیه.
چجوری این کارو با جاوا اسکریپت انجام بدم ؟؟
لطفا به کد HTML زیر که مربوط به مثال بالاست توجه کنید:<form name="myForm" action="js_validation.php" onsubmit="return validateForm();" method="post">
Email: <input type="text" name="email">
<input type="submit" value="Submit">
</form>
اگر در تگ form در بالا به رویداد onsubmit توجه کنید، خواهید دید که فرم Submit نخواهد شد مگر اینکه تابع validateForm مقدار true برگرداند...! پس سوال شما در اینجا پاسخ داده شد.
در واقع زمانی که فیلدهای الزامی، تنظیم نشوند و یا فیلد ایمیل بطور صحیح وارد نشود تابع validateForm مقدار false را بر میگرداند (return false) و به این ترتیب form به سرور ارسال (submit) نخواهد شد.
شما در بخش " اعتبار سنجی ایمیل (E-mail Validation) " در بخشی که کد های جاوا اسکریپت رو نوشتید ، نوشتین که :
if (atpos
کدهاتون کامل نیومده!!!
شما در بخش " اعتبار سنجی ایمیل (E-mail Validation) " در بخشی که کد های جاوا اسکریپت رو نوشتید ، نوشتین که :
if (atpos
کدها کامل نیومده!!!
در بارگذاری کدها به علامتهای > و < دقت کنید. برای علامت > عبارت ;lt& و برای علامت < عبارت ;gt& رو بذارید.
میخواستم یه کد بنویسم که چک کنه اگه جاوا اسکریپت مرور گر غیر فعاله خودش فعال کنه.
یا اگه جاوا اسکریت غیر فعال بود دکمه ثبت نام غیر فعال بشه
خواهشا زود جواب بدهید خیلی فوریه.با تشکررررررر
میشه توسط تگ script فهمید که کدهای جاوااسکریپت در مرورگر قابل اجرا هستند یا خیر. و توسط تگ noscript میشه فهمید که کدهای جاوااسکریپت در مرورگر کار نمیکنه. کد زیر:
<script type="javascript">
... construction of ajaxy-link, setting of "js-enabled" cookie flag, etc..
</script>
<noscript>
<a href="page_without_js.php?nojs=1" >Page without Javascript</a>
</noscript>
ولی اینکه بشه این قابلیت رو از طریق کد فعال یا غیر فعال کرد رو باید از طریق مرورگر انجام بدید. فکر نمیکنم از طریق کد بشه. چون به لحاظ امنیتی مشکل داره.
میتونید تو این تگ یه نشانهای بذارید مبنی بر اینکه جاوااسکریپت غیر فعاله.
function validateForm() { var name=document.forms["chform"]["chname"].value; var address=document.forms["chform"]["chaddress"].value; var admin=document.forms["chform"]["chadmin"].value; var atposaddress=address.indexOf("@"); var atposadmin=admin.indexOf("@"); var flage=true; if(atposaddress>0) { document.getElementById("addressid").innerHTML=" آدرس کانال با @ شروع میشود"; var flage=false; } if(atposadmin>0) { document.getElementById("adminid").innerHTML="آی دی ادمبن با @ شروع میشود"; var flage=false; } return flage; } name addres: admin:
ظاهرا مشکلی تو کد نیست...
تو مفهوم کد مشکلی نیست. شما باید نحوه نمایش خطا رو تصحیح کنید. جلوی کنترل مربوط یه تگ span با id خاصی بذارید و در صورت خطا اون رو پر کنید.
نکتهاش این هست که اول تابع هم این span ها رو خالی باید کنید.
چطوری خطا رو خالی کنم
document.getEl ementById("addr essid").innerHT ML=" "
کد بالا رو به تابع اضافه کنم درسته؟یا روشدیگری هم هست
نکتهاش این هست که اول تابع هم این span ها رو خالی باید کنید.
بله نکتهاش این که با هر بار اجرا فرم دوباره چک میشه. پس باید ابتدا خطاهای قبلی پاک بشه و بعد از چک شدن اگه خطا داشت دوباره نمایش داده بشه و اگه خطا نداشت، که هیچی.
این خط کد ارور میداد!!!!!
متن خطا رو بذارید تا بشه راهنمایی کرد.
چطور می توان :
1 - یک textbox ایجاد کرد که فقط عدد در ان وارد شود؟
2 - یک textbox ایجاد کرد که بیشتر از 4 کارکتر در ان وارد نشود ؟
با تشکر
1- برای انجام این کار چندین راه وجود دارد اما ساده ترین آنها استفاده از پلاگین های jQuery است، برای این منظور به آدرس زیر مراجعه فرمایید:
beyamooz.com/jquery/340-jquery-plugin/4079-%D9%BE%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D9%85%D8%A7%D8%B3%DA%A9-%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C
2- برای این مورد نیر می توان از پلاگین بالا استفاده نمود ولی راه حل ساده تر آن این است که خصوصیت maxlength را برای فیلد مورد نظر تنظیم کنید.<input type="text" name="country_code" pattern="[A-Za-z]{3}" title="Three letter country code" maxlength="2" />
البته برای اعتبار سنجی فرم ها در HTML5 خصوصیت Pattern اضافه شده است، پیشنهاد می کنم این مورد را نیز بررسی فرمایید: البته در مثال بالا علاوه بر ویژگی Maxlength از Pattern نیز استفاده شده است.
برای کسب اطلاعات بیشتر در مورد Pattern به لینک زیر مراجعه کنید:
beyamooz.com/html5/623-%D8%AE%D8%B5%D9%88%D8%B5%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%AF%D8%B1-html5
من فرم ثبت نام ساختم ولی نمیدونم چجوری می تونم بعد از ثبت نام عبارت ثبت نام انجام شد رو بهش اضافه کنم لطفا منو راهنمایی کنید
آیا اتصال با پایگاه داده و ذخیره اطلاعات ارسالی در پایگاه داده را هم تنظیم کرده اید؟
اطلاعاتی که در یک فرم نوشته می شوند باید در پایگاه داده ذخیره شوند. پس برای مورد مطرح شده می بایست چک کنید در صورتی که این اطلاعات در پایگاه داده درج شده باشد عبارت ثبت نام انجام شد نمایش داده شود. در صورتی که با کد نویسی php آشنایی دارید می توانید برای نمونه از تصویر زیر استفاده نمایید:
اما در صورتی که اشنایی ندارید بهتر است تا ابتدا از آموزش های php در سایت استفاده کنید.
var x = [email protected]
نکته: اولین کاراکتر دارای اندیس 0 می باشد.
در مثال بالا گفته ایم اگر هر یک از موارد زیر رخ داد، آدرس ایمیل صحیح نمی باشد:
1- @ یا وجود نداشد یا اولین کاراکتر ایمیل بود. (اگر @ وجود نداشته باشد تابع indexOf عدد -1 را بر می گرداند.)
2- lastIndexOf آخرین باری که کاراکتر "." در رشته آمده است را بر می گرداند. آخرین "." می بایست حداقل دو کاراکتر بعد از @ باشد و الا ایمیل صحیح نیست. که این موضوع با شرط dotpos<atpos+2 بررسی شده است.
3- در نهایت می بایست مطمئن شویم که بعد از آخرین نقطه حداقل یک کاراکتر آمده باشد. این کار را با شرط dotpos+2<=x.length بررسی می کنیم.