مستنداتنسخهٔ ۲٫۰نمونهٔ زنده
مستنداتصفحه‌ها و فرم‌هافرم‌ها و اعتبارسنجی

فرم‌ها و اعتبارسنجی

ساختار فیلدها، قاعده‌های اعتبارسنجی و صفت‌هایی که رفتار فرم را تعیین می‌کنند.

صفت‌های data#

رفتار فرم‌ها با صفت‌های data-* مشخص می‌شود و نیازی به نوشتن جاوااسکریپت نیست.

روی فرم#

صفتمعنا
data-nextالزامی. نشانی مقصد پس از موفقیت؛ مقدار none یعنی در همان صفحه بمان و فرم را خالی کن. بدون این صفت، اسکریپت فرم را مدیریت نمی‌کند
data-endpointکلید یکی از سرویس‌های config.api (مثل login) یا یک نشانی کامل
data-okمتن تاست موفقیت (اگر سرور message نفرستاده باشد)
data-demo-authفقط حالت نمایشی: رمز وارد‌شده را با demoPassword مقایسه می‌کند
data-stepsفرم چندمرحله‌ای؛ هر مرحله یک .panel

روی فیلد و دکمه#

صفترویمعنا
data-ruleinputقاعدهٔ اعتبارسنجی: email، phone، national، req، pass یا قاعدهٔ سفارشی
data-matchinputانتخاب‌گر فیلد مرجع؛ مثلاً #pw برای تکرار رمز
data-next-step / data-prev-stepbuttonرفتن به مرحلهٔ بعد یا قبل
data-socialbuttongoogle یا apple؛ نشانی از config.social خوانده می‌شود
data-action="resend-email"buttonدرخواست ارسال دوبارهٔ ایمیل

سایر عناصر#

صفترویمعنا
data-next.otpمقصد پس از تأیید کد
data-purpose.otpهدف کد که به سرور فرستاده می‌شود
data-timer / data-resendداخل صفحهٔ کدنمایش زمان باقی‌مانده و دکمهٔ ارسال دوباره
data-count.cdشمارش معکوس بر حسب ثانیه از لحظهٔ بارگذاری
data-until.cdشمارش معکوس تا تاریخ ISO
data-modal / data-closeپیوند / دکمهباز و بستن مودال با شناسهٔ آن
data-theme-togglebuttonتغییر تم روشن و تیره
data-demo-only / data-demo-fillعنصرمتن‌هایی که فقط در حالت نمایشی دیده می‌شوند

ساختار یک فیلد#

HTML
<div class="field">
  <input id="email" name="email" type="email" placeholder=" "
         autocomplete="email" data-rule="email" dir="ltr">
  <label for="email">ایمیل</label>
  <div class="msg" role="alert"><span></span></div>
</div>

placeholder=" " (یک فاصله) لازم است؛ برچسب شناور با آن کار می‌کند. name فیلد، نام کلید آن در دادهٔ ارسالی به سرور است. هر input باید id یکتا داشته باشد و داخل .field همراه با .msg قرار بگیرد.

فیلد رمز و نمایشگر قدرت#

HTML
<div>
  <div class="field">
    <input id="pw" name="password" type="password" placeholder=" "
           autocomplete="new-password" data-rule="pass">
    <label for="pw">رمز عبور</label>
    <button type="button" class="eye" aria-label="نمایش رمز" aria-pressed="false">
      <svg class="ic" aria-hidden="true"><use href="#i-eye"/></svg>
    </button>
    <div class="msg" role="alert"><span></span></div>
  </div>
  <div class="meter" data-s="0" aria-hidden="true"><i></i><i></i><i></i><i></i></div>
</div>
<div class="field">
  <input id="pw2" name="password_confirmation" type="password" placeholder=" "
         data-rule="pass" data-match="#pw">
  <label for="pw2">تکرار رمز عبور</label>
  <div class="msg" role="alert"><span></span></div>
</div>

نمایشگر .meter باید کنار .field رمز و داخل همان عنصر والد باشد. امتیاز قدرت از چهار معیار ساخته می‌شود: دست‌کم ۸ نویسه، ترکیب حروف کوچک و بزرگ، وجود رقم، و وجود نماد یا طول ۱۲ نویسه و بیشتر. فیلد تکرار رمز همیشه لحظه‌ای بررسی می‌شود.

چک‌باکس الزامی#

HTML
<div class="cb">
  <label class="check">
    <input type="checkbox" name="terms" required>
    با <a href="#" data-modal="terms">قوانین و شرایط</a> موافقم
  </label>
  <div class="msg" role="alert"><span></span></div>
</div>

قاعده‌های اعتبارسنجی#

قاعدهشرطنکته
emailقالب name@example.com—
phoneموبایل ایران: 09 و ۱۱ رقمارقام فارسی هم پذیرفته می‌شود
nationalکد ملی ۱۰ رقمی با بررسی رقم کنترلکدهای تکراری مثل 1111111111 رد می‌شوند
reqدست‌کم ۲ نویسه—
passدست‌کم ۸ نویسه شامل حرف انگلیسی و رقم—

فیلدهای type="tel" پیش از ارسال به سرور به ارقام لاتین تبدیل می‌شوند.

زمان نمایش خطا#

خطای هر فیلد تا وقتی کاربر آن را ترک نکرده نمایش داده نمی‌شود و پس از آن لحظه‌ای است. هنگام ارسال، فیلدهای خالی الزامی هم علامت می‌خورند و فوکوس به اولین فیلد نامعتبر می‌رود. در فرم چندمرحله‌ای فقط فیلدهای مرحلهٔ فعلی بررسی می‌شوند.

قاعدهٔ سفارشی#

با Mehmannavaz.addRule قاعدهٔ تازه تعریف کنید. تابع باید true یا متن پیام خطا را برگرداند. نام قاعده در data-rule نوشته می‌شود:

HTML
<script src="../assets/js/mehmannavaz.js"></script>
<script>
  Mehmannavaz.addRule("username", v =>
    /^[a-z0-9_]{3,20}$/.test(v) || "نام کاربری ۳ تا ۲۰ نویسه (حرف کوچک، عدد و _) باشد");
</script>
HTML
<input id="u" name="username" data-rule="username" placeholder=" ">

تعریف دوباره یک قاعدهٔ موجود (مثلاً email) پیام یا منطق آن را جایگزین می‌کند.

کد یک‌بارمصرف#

HTML
<div class="otp" role="group" aria-label="کد ۶ رقمی"
     data-purpose="reset" data-next="reset-password.html">
  <input inputmode="numeric" maxlength="6" autocomplete="one-time-code" aria-label="رقم ۱">
  <input inputmode="numeric" maxlength="6" autocomplete="off" aria-label="رقم ۲">
  <!-- ... تا رقم ۶ -->
</div>
<p class="timer center">ارسال دوباره کد تا <span data-timer></span> دیگر</p>
<button class="linkbtn" type="button" data-resend>ارسال دوباره کد</button>

فرم چندمرحله‌ای#

HTML
<div class="steps" aria-hidden="true"><i></i><i></i><i></i></div>
<form data-steps data-endpoint="register" data-next="success.html" novalidate>
  <div class="panel on stack">
    ...
    <button class="btn" type="button" data-next-step><span class="lbl">ادامه</span></button>
  </div>
  <div class="panel stack">
    ...
    <button class="btn ghost" type="button" data-prev-step><span class="lbl">قبلی</span></button>
  </div>
</form>

تعداد <i> در .steps باید با تعداد .panelها برابر باشد. کلید Enter در فیلدها به مرحلهٔ بعد می‌رود و فرم را زودهنگام ارسال نمی‌کند. همهٔ مرحله‌ها در یک درخواست و با هم ارسال می‌شوند.

مهمان‌نواز نسخهٔ ۲٫۰ · مهر ۱۴۰۵فهرست تغییرات