چطوری میشه در هنگام ثبت نام در جوملا 2.5 در بخش نام کاربری ،کاربر را محدود کنیم که مثلا فقط انگلیسی و عدد(حداکثر 10 کاراکتر) وارد کند و از حروف فارسی در نام کاربری جلوگیری کرد؟؟

چطوری میشه در هنگام ثبت نام در جوملا 2.5 در بخش نام کاربری ،کاربر را محدود کنیم که مثلا فقط انگلیسی و عدد(حداکثر 10 کاراکتر) وارد کند و از حروف فارسی در نام کاربری جلوگیری کرد؟؟
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
کد اعتبار سنجی(Validation) فرم ثبت نام جوملا اینجاست :خوب حالا عبارت username رو سرچ می کنی، می رسی به یه همچین چیزی :کد:/media/system/js/validate.js
اون قطعه از کد که مشخص شده جواب شماست، این یه [مهمان/کاربر گرامی برای دیدن لینک ها ابتدا باید عضو سایت شوید و لاگین کنید برای ثبت نام اینجا کلیک کنید]([مهمان/کاربر گرامی برای دیدن لینک ها ابتدا باید عضو سایت شوید و لاگین کنید برای ثبت نام اینجا کلیک کنید]) رو تعریف کرده برای مقدار معتبر فیلد username، که حالا می تونی هرجور خواستی محدودش کنی...کد:this.setHandler("username",function(a){regex=/[<|>|"|'|%|;|(|)|&]/i;return!regex.test(a)});
مثلا این :
یا هرچی دیگه...کد:this.setHandler("username",function(a){regex=/^[a-zA-Z0-9];return!regex.test(a)});
ویرایش توسط samir : 11-12-2012 در ساعت 02:21 AM
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
با تشکر
حالا حروف و عدد رو گفتی !@#$%^&*()_+= این کاراکتر ها هم میخوام به اونا اضافه کنم چظوری بزارم؟؟ بینشون ویرگول بزارم یا چیز دیگه نمی دونم دستور کامل که همه چی رو داشته باشه برام بزار.
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
اون کدی بالا گذاشتی رو معتبر میدونه یا خیر منظورم این کده
this.setHandler("username",function(a){regex=/^[a-zA-Z0-9];return!regex.test(a)}); الان توی این کد از حروف انگلسیی و اعداد مجاز هست یا غیرمجاز، من میخوام فقط حروف فارسی رو نگذارم کاربر وارد کنه...
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
خوب تو همون کد یه نگا بندازی متوجه می شی :مثلا برای فیلد ایمیل :کد:initialize : function () { this.handlers = {}; this.custom = {}; this.setHandler("username", function (a) { regex = /[<|>|"|'|%|;|(|)|&]/i; return !regex.test(a) }); this.setHandler("password", function (a) { regex = /^\S[\S ]{2,98}\S$/; return regex.test(a) }); this.setHandler("numeric", function (a) { regex = /^(\d|-)?(\d|,)*\.?\d*$/; return regex.test(a) }); this.setHandler("email", function (a) { regex = /^[a-zA-Z0-9._-]+(\+[a-zA-Z0-9._-]+)*@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/; return regex.test(a) }); $$("form.form-validate").each(function (a) { this.attachToForm(a) }
منبعش هم [مهمان/کاربر گرامی برای دیدن لینک ها ابتدا باید عضو سایت شوید و لاگین کنید برای ثبت نام اینجا کلیک کنید] که می تونی بیشتر مطالعه کنی...یک الگوی نسبتا ساده برای بررسی آدرس ایمیل
۱- این یعنی آغاز خط و بلافاصله بعد از اون الگوی ۲ قرار گرفته باشه.
۲- در الگوی ۲ یک گروه کاراکتری متشکل از a تا z کوچک و بزرگ، صفر تا نُه، نقطه، زیرخط و علامت منها قرار گرفته. بلافاصله بعد از این گروه، یک علامت بعلاوه هست که یعنی از این گروه کاراکتری دست کم یکی و دست بالا! هر چند تا که باشه درسته. به عبارتی این میشه آدرس ایمیل قبل از @ مثلا در [مهمان/کاربر گرامی برای دیدن لینک ها ابتدا باید عضو سایت شوید و لاگین کنید برای ثبت نام اینجا کلیک کنید] میشه someone .
۳- علامت @ معنی خاصی نداره و میشه خودش. تا به اینجا شد، ابتدای خط، بلافاصله بعدش یک تا هر چند تا کاراکتر (الگوی ۲) و بعد بلافاصله یک علامت @.
۴- بعد یه گروه کاراکتری دیگه.اینبار یه کم تفاوت داره با الگوی اسم. چون این مربوط میشه به اسم دومین. توی [مهمان/کاربر گرامی برای دیدن لینک ها ابتدا باید عضو سایت شوید و لاگین کنید برای ثبت نام اینجا کلیک کنید] این میشه قسمت example یعنی بعد از @ و قبل از نقطه. اینبار دیگه نقطه و زیرخط نیستن چون این دو تا کاراکتر توی اسم مجازن، اما تو اسم دومین نه. بلافاصله بعدش هم یه علامت + (بعلاوه) اومده که یعنی الگوی کاراکتری یک یا هر چند بار میتونه تکرار بشه.
۵- اما نقطه، چون نقطه توی عبارت باقاعده معنی داره،*ولی ما اینجا منظورمون دقیقا خود نقطه هست نه معنیش، بالاجبار باید قبلش یه بک اسلش \ بگذاریم که نقطه تعبیر نشه به هر کاراکتری، و معنی فقط نقطه اعمال بشه.
۶-بعد از نقطه پسوند میاد مثلا کام (com) یا آی آر (ir) یا گاهی کو دات آی آر (co.ir) کوتاهترین پسوند دو حرفیه مثل ir و بلندترین پنج حرفی مثل co.ir ، به همین دلیل نوشته شده {2,5} .تشکیل هم شده از حروف انگلیسی و نقطه. که اگه دقت کنید نقطه ای که داخل گروه کاراکتری قرار گرفته بک اسلش نداره، چون اونجا دیگه معنی همه کاراکترها رو نمیده و معنی خودش رو میده.(بعضی کاراکترها داخل گروه کاراکتری معنیشون فرق میکنه مثل همین نقطه یا ^ )
۷- بعدشم که آخر خط. یعنی بعد از این الگوها باید برسیم به آخر خط و ادامه نداشته باشه.
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
با سلام خسته نباشید واقعا دمت گرم
ولی من ازت یک خط کد میخوام من از این کدها سر در نمیارم من فقط یک خط کد میخوام که اونجا جابجا کنم، دستت درد نکنه جامع توضیح دادی، ولی یک خط کد به من بده که کاربر حداکثر10 حرف همه چی بتونه وارد کنه بجز حروف فارسی.. دستت دردنکنه
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
اگه یه خطی می خوای بیا :
می ری اینجا :
می گردی دنبال این :کد:JOOMLA\libraries\joomla\database\table\user.php
تغییرش می دی به این:کد:Line 197: if (preg_match("#[<>\"'%;()&]#i", $this->username) || strlen(utf8_decode($this->username)) < 2)
بعدم دیگه می ری به سلامت...کد:if (!preg_match("[a-zA-Z0-9]", $this->username) || strlen(utf8_decode($this->username)) < 2 || strlen(utf8_decode($this->username)) > 11 )
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
با سلام
1-من میخوام کاربر در نام کاربری حروف انگلیسی،عدد و -_. مجاز باشه وارد کنه.
2-حروف فارسی ، و بقیه کاراکترها مثله !@#$%^&*)(=+ نتونه وارد کنه پیغام بده حروف غیر مجاز. تا اینجا با من اوکی هستی.
نکته : نکته اصلی اینه که شما اون رو در نظر نگرفتی، اینه که وقتی شما میگی a-z وارد کن وقتی کاربر alt+shift رو زد و فارسی تایپ کرد، چون در بازه ی a-z هست بازم میتونه فارسی وارد کنه متوجه ای.
بقیه کجا هستن مدیران عزیز کمک کنن.
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
این بحث، بحث مفیدیه... گفتم کاملش کنم شاید به درد کسی بخوره...
برای محدود کردن کاراکتر های ورودی در فرم ثبت نام دو راه وجود داره:
1- استفاده از اعتبار سنجی سمت کاربر(Client-side validation)
2- استفاده از اعتبار سنجی سمت سرور(Server-side validation)
1- استفاده از اعتبار سنجی سمت کاربر(Client-side validation)
خوب روش اول که کاربرپسندتره(برای نمونه فیلد نام کاربری یا Username رو بررسی می کنیم) :
کد اعتبار سنجی(Validation) فرم ثبت نام جوملا اینجاست :
خوب حالا عبارت username رو سرچ می کنیم، می رسیم به یه همچین چیزی :کد:JOOMLA/media/system/js/validate.js
اون قطعه از کد که مشخص شده یه [مهمان/کاربر گرامی برای دیدن لینک ها ابتدا باید عضو سایت شوید و لاگین کنید برای ثبت نام اینجا کلیک کنید]([مهمان/کاربر گرامی برای دیدن لینک ها ابتدا باید عضو سایت شوید و لاگین کنید برای ثبت نام اینجا کلیک کنید]) رو تعریف کرده برای مقدار معتبر فیلد username، که حالا می تونیم هرجور خواستیم محدودش کنیم...کد:this.setHandler("username",function(a){regex=/[<|>|"|'|%|;|(|)|&]/i;return!regex.test(a)});
مثلا اینجا می خواییم جلوی ورود کاراکترهای فارسی رو بگیریم :کد:this.setHandler("username",function(a){regex=/[|ا|ب|پ|ت|ث|ج|چ|ح|ی|خ|د|ذ|ر|ز|س|ش|ط|ظ|ع|غ|ف|ق|ک|گ|ل|م|ن|و|ه|ي|ئ|ض|ص<|>|"|'|%|;|(|)|&]/i;return!regex.test(a)});
اتفاقی که وقتی کاربر از کاراکترهای فارسی توی فیلد نام کاربری استفاده می کنه می افته اینه که همون جا اون فیلد طبق دیفالت جوملا اعلام خطا می کنه(که معمولا رنگش قرمز می شه)...
برای اطلاع دادن به کاربر که چه خطائی رخ داده، ساده ترین راه اینه که hint فیلد نام کاربری رو هم سفارشی کنیم که اونم توی فلدر زبان جوملا توی این مسیر پیدا می شه:
هر توضیحی که مد نظر هست رو جلوی این فیلد وارد می کنیم:کد:JOOMLA\language\fa-IR\fa-IR.com_users.ini
مثلا:
حالا وقتی موس رو فیلد نام کاربری می ره، این پیغام نمایش داده می شه...کد:COM_USERS_DESIRED_USERNAME="لطفا نام کاربری دلخواه خود را انتخاب نمایید-کاراکترهای فارسی مجاز نمی باشد"
مشکل این روش: اگه جاوا در سمت کاربر به هر دلیل غیر فعال باشه دیگه این روش عمل نمی کنه...
2- استفاده از اعتبار سنجی سمت سرور(Server-side validation)
روش دوم که اصولی تره :
به آدرس زیر می ریم:
این خط رو توی این فایل پیدا می کنیم:کد:JOOMLA\libraries\joomla\database\table\user.php
این شرط قبل از نوشتن نام کاربری توی بانک اعتبار مقدار اون رو چک می کنه؛ که حالا می تونیم هرجور می خواییم سفارشیش کنیم:کد:if (preg_match("#[<>\"'%;()&]#i", $this->username) || strlen(utf8_decode($this->username)) < 2)
الگو:
مثلا:کد:if (preg_match("#[اینجا هرچی می خوایم نباشه رو اضافه می کنیم]#i", $this->username) || strlen(utf8_decode($this->username)) < حداقل تعداد کاراکتر || strlen(utf8_decode($this->username)) > حداکثر تعداد کاراکتر)
با کد بالا ما جلوی ورود کاراکترهای فارسی بعلاوهء کاراکترهای غیرمجاز رو هم می گیریم و تعداد کاراکترها رو هم بین 4 تا 14 کاراکتر محدود می کنیم...کد:if (preg_match("#[<>\"'%;()&(ابپتثجچحیخدذرزسشطظعغفقکگلمنوهيئضص)]#i", $this->username) || strlen(utf8_decode($this->username)) < 3 || strlen(utf8_decode($this->username)) > 15)
و حالا کاری که باقی می مونه سفارشی کردن پیغام خطاست که کاربر متوجه مشکل بشه...
اونم توی مسیر زیر باید پیدا بشه:
توضیحی که لازم هست رو جلوی فیلد زیر وارد می کنیم:کد:JOOMLA\language\fa-IR\fa-IR.lib_joomla.ini
مثلا:
اگه چیزی جا افتاده بگید که اضافه بشه...کد:JLIB_DATABASE_ERROR_VALID_AZ09=""خطا... نام کاربری می بایست بدون فاصله، حداقل 4 و حداکثر 14 کاراکتر و <strong>نباید</strong> شامل کاراکترهای فارسی و این: < > \ "_QQ_" ' % ; ( ) &" کاراکترها باشد.""
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
samir جان
من شدیدا نیاز دارم که فیلد یوزرنیم رو به یه عدد 8 رقمی محدود کنم و هیچ کاراکتر دیگری نیز وارد نشود . روش اول Client-side validation رو که شما فرموده بودین انجام دادم ولی هیچ اتفاقی نیافتاد و باز موقع ثبت نام همه کاراکتر ها را قبول می کنه . به نظرتون کار دیگری نیز بجز مواردی که فرموده بودین باید در مورد روش اول انجام می دادم ؟
جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.
علاقه مندی ها (Bookmarks)