חסימת משתמשים מלכתוב תווים מסוימים (אותיות\מספרים)

פורומים אפיון ופיתוח פריוריטי חסימת משתמשים מלכתוב תווים מסוימים (אותיות\מספרים)

  • Post
    snoof123
    משתתף
    שלום..
    אני רוצה לתחזק שדה מסוג CHAR ולמנוע בו כתיבה של אותיות, אני יודע שזה נשמע מוזר אבל הייתי רוצה לדעת:

    האם יש פונקציות (קוד פריוריטי) שעושות ולידציה על מידע ברמה של אותיות/מספרים, נניח שגיאה כאשר יש מספר/שגיאה כאשר יש אותיות?
    (אותיות גדולות וקטנות אני מכיר).

    תודה לעוזרים 🙂

מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)
  • Replies
    אלמוני
    אורח
    תוכל לכתוב טריגר CHECK_FIELD לשדה ולבדוק באמצעות STRPIECE אם הוקש אות לא רצויה.
    למשל, אני מסנן כתובות דוא"ל בצורה הזו
    STRPIECE (PHONEBOOK.EMAIL, '@', 2, 1) = "
    אם התוצאה ריקה, אז כנראה *לא* מופיע @ בשדה. אתה רוצה את ההיפך.
    snoof123
    משתתף
    אבל אז אני צריך להכניס את כל התווים האפשריים באנגלית שם? או שאני עושה לכל תו בנפרד פקודה כזו?
    כי אני בעצם רוצה למנוע נניח הכנסה של אותיות ותווים אחרים שאינם מספר.

    נעם תודה רבה על המענה 🙂

    אלמוני
    אורח
    אם אתה עובד עם גרסה 17 אז יש דרך אחרת. אני כותב קוד כאן ישירות לכן יכולה להיות שגיאת תחביר.

    :LEN = STRLEN (:$.@);
    :A = 0;
    LABEL 1;
    :A = :A + 1;
    ERRMSG 1 WHERE SUBSTR (:$.@, :A, 1) IN ('$', '%', '@', '~');
    LOOP 1 WHERE :A < :LEN;

    או בעברית –
    לשמור את אורך המחרוזת של השדה הנוכחי
    לאפס מונה
    תווית
    להוסיף אחד למונה
    להציג הודעת שגיאה אם האות התורנית במחרוזת נמצאת בקבוצת האותיות האסורות
    לחזור בחזרה לתוית אם המונה פחות מאורך המחרוזת

    הוסיפו את הפונקציה SUBSTR בגרסה 17. יש לה יתרון עצום על פני STRIND – הפרמטרים יכולים להיות משתנים.

    roni
    משתתף
    יש גם את הפונקציה ISNUMERIC שבודקת האם הערך הוא מספר
    snoof123
    משתתף
    תודה לשניכם,
    נראה לי שאנסה קודם את הפונקציה של רוני היא נראית די ידידותית 🙂
    snoof123
    משתתף
    ניסיתי להשתמש בפונקציה שכתבת רוני לפי הSDK אם השדה אינו מכיל מספר אני אמור לקבל חזרה ערך 0 ואם כן אני מקבל חזרה ערך 1.
    לקחתי עמודת CHAR ללא טריגרים עליה, הוספתי עליה טריגר CHECK-FIELD
    עשיתי:
    SELECT ISNUMERIC(:$.@) FROM DUMMY;
    ERRMSG 994 WHERE :RETVAL < 1;

    וגם כשהכנסתי מספרים וגם כשהכנסתי מחרוזת קיבלתי חזרה 1.

    ז"א שהמערכת לא ביצעה לי חסימה.

    יש איזה משהו שאני מפספס לדעתך? :dry:

    אלמוני
    אורח
    אין לי נסיון עם הפוקנציה הזו אך נראה לי שאתה צריך לשמור את התוצאה בתוך משתנה (לא RETVAL) ולהציג את הודעת השגיאה בהתאם.
    תנסה משהו כזה
    ERRMSG 994 FROM DUMMY
    WHERE ISNUMERIC ׂ(:$.@) = 1
    snoof123
    משתתף
    עובד, תודה רבה 🙂
    נעם, אם לא היית קיים היה צריך להמציא אותך
מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.