نمایش نتایج 1 تا 8 از 8

نام تاپیک: عبارت منظم براي تاريخ شمسي

  1. #1

    Unhappy عبارت منظم براي تاريخ شمسي

    كسي از دوستان يك Regular Expression براي تاريخ شمسي به فرمت زير مي تونه بنويسه من چند مورد نوشتم ولي باز هم خطا داره
    "1385/05/08"


    لطفا كمك كنيد

  2. #2

    نقل قول: عبارت منظم براي تاريخ شمسي

    یک نوع از RegEx که بنده برای بررسی صحت تاریخ شمسی نوشتم به شکل ذیل هست:

    ((?<!\d+)([1-9]|[1-2][0-9]|[0][1-9]|[3][0-1]))/([1-9]|[0][1-9]|[1][0-2])/([1-9][0-9][0-9][0-9](?!\d+))

    با چند تاریخ مختلف هم تستش کردم. به خوبی جواب میده.
    البته این عبارت باقاعده تاریخ رو با این فرمت بررسی می کنه >>> DD/MM/YYYY
    اگر نیاز داشتی که بالعکس تاریخ رو بررسی کنی، جای عبارات درون پرانتزهای دوم و چهارم رو عوض کن.
    پرانتز دوم برای صحت روز، پرانتز سوم برای صحت ماه و پرانتز چهارم برای صحت سال هست.

    موفق باشید.

  3. #3

    نقل قول: عبارت منظم براي تاريخ شمسي

    آقا بهروز ممنون از لطفتون
    اما من همين عبارت شما رو عينا بدون تغيير كپي مي كنم و در Validator قرار مي دهم اما خطاي زمان اجرا ميگيره ميگه عبارت منظم وارد شده صحيح نيست
    من خودم اين عبارت رو نوشتم ولي براي تاريخ هاي مثل 1386/09/31 خطا نمي گيره ولي تو بقيه حالات درسته
    ^^(1[34]\d\d)\/(1[012]|0[1-9])\/(0[1-9]$|[12]\d$|3[01]$)

    اين جور كه مال شما روهم ميبينم به نظر همين مشكل رو داره

  4. #4

    نقل قول: عبارت منظم براي تاريخ شمسي

    من در اون عبارت با قاعده از Negative lookbehind و Negative lookahead استفاده کردم.
    بدین دلیل در Validator جواب نمیده که Validator ها JavaScript-based هستند و جاوا اسکریپت از Negative lookbehind و Negative lookahead پشتیبانی نمی کنه.

    موفق باشید.

  5. #5

    نقل قول: عبارت منظم براي تاريخ شمسي

    ضمن اینکه نگفته بودی که RegEx رو برای Validate می خوای! اون عبارت با قاعده ای که دادم "تمامی" تاریخ های شمسی رو متن در سمت سرور پیدا می کنه.
    وقتی در ابتدای عبارت با قاعده، ^ و در انتهای اون $ میگذاری، یعنی قصد Validate کردن فقط یک عبارت مشخص رو داری.
    نقل قول نوشته شده توسط amirniknam
    من خودم اين عبارت رو نوشتم ولي براي تاريخ هاي مثل 1386/09/31 خطا نمي گيره ولي تو بقيه حالات درست
    بررسی این موضوع که آیا در 6 ماه اول هستیم و ماه 31 روز هست یا در 6 ماه دوم هستیم و ماه 30 روز هست یا سال کبیسه است و اسفند 30 روز است با Embedding Conditions در RegEx مسیر هست اما مشکل اینجاست که Embedding Conditions هم در جاوا اسکریپت پشتیبانی نمیشن!
    البته میشه بدون Embedding Conditions هم نوشت اما عبارت با قاعده ی تولیدی خیلی طولانی میشه و پردازش اون سنگین!
    مثل اینکه بگی اگر کاربر ماه رو 01 یا 02 یا ... وارد کرد، قسمت روز باید تا 31 باشه و ...

    موفق باشید.

  6. #6

    نقل قول: عبارت منظم براي تاريخ شمسي

    علت اينكه ميخوام سمت كلاينت Validate بشه اينكه كاربر بايد يك فرم نسبتا مفصل رو پر كنه كه اطلاعات امنيتي مهمي داخل اون هست من نمي خوام بعد از رفرش شدن صفحه دوباره اون اطلاعات نمايش داده بشه براي همين وقتي صفحه رفرش ميشه كلي از فيلد هايي رو كه كاربر وارد كرده خالي ميكنه براي همين سعي كردم تمام قسمت ها رو به صورت Ajax‌ پياده كنم تنها مورد همين تاريخ شمسي هست (البته با خوم گفتم اگه نشه مجبورم اطلاعات رو داخل Session ذخيره كنم بعد صفحه رو لود كنم)

  7. #7

    نقل قول: عبارت منظم براي تاريخ شمسي

    بهروز جان،
    (?!\d+)
    این یعنی چی؟

  8. #8

    نقل قول: عبارت منظم براي تاريخ شمسي

    اون عبارت، با عنوان Negative lookahead شناخته میشه. Negative lookahead ها برای شناسایی عباراتی استفاده میشن که در انتهای اونها، کاراکتر یا عبارت مشخصی وجود "نداره". ضمن اینکه اون عبارت رو هم در نتیجه ی برگشتی قرار نمیدن.
    d\ یعنی اعداد 0 تا 9 و + یعنی تکرار یک یا بیشتر.
    معنای اون عبارت میشه: "بعد از سال نباید یک یا تعداد بیشتری عدد وجود داشته باشه".
    به عنوان مثال، 1/1/1387 صحیح هست اما 1/1/13872 صحیح نیست.

    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •