שלח תשובה

זירת השאלות

273
צפיות
13
תשובות

פונקציה שבודקת אם המחרוזת היא מספר

,‏ 14 ביולי, 2004

לאחר תסבוכים רבים עם פונקציית ה- isnumeric המקורית, החלטתי לבנות מחדש את אותה פונקציה לפי צרכי.
הפונקציה שבניתי היא:


function isnumeric(val)
    if val="" or isempty(val) or isnull(val) then
        isnumeric=false
    else
        dim newval
        newval=true
        dim i
        dim char
        for i=1 to len(val)
            char=mid(val,i,1)
            if char<>"0" and char<>"1" and char<>"2" and char<>"3" and char<>"4" and char<>"5" and char<>"6" and char<>"7" and char<>"8" and char<>"9" then
                newval=false
                exit for
            end if
        next
        isnumeric=newval
    end if
end function

הפונקציה בודקת שכל אחד ואחד מהתווים במחזורת זו ספרה בין 0 ל- 9.
הפונקציה לא מתחשבת במספרים שליליים ועשרוניים.
אשמח לקבל הצעות לשיפור וייעול.

תגיות:

13 תשובות

  1. רום הגיב:

    לא יותר פשוט לרשום…


    if char<"0" or char>"9" then

  2. Deviation הגיב:

    למה? – אפשר לקצר את זה הרבה..
    למה לא RegExp כזה? :


    function fCheckIsNumber(strNumber){
         return /^[0-9]+$/.test(strNumber);
    }

    גם יותר מהיר, גם יותר יעיל

  3. Deviation הגיב:

    זה JS צד לקוח מה שנתתי לך
    יהיה הרבה יותר יעיל לבדוק ככה.

    מה גם שיש RegExpים ב VBS, זה אומנם לא יעיל אבל בהחלט קיים!

    ואם אפשר לשאול, מה הייתה בפונקציה isnumeric?

  4. לא יצא לי לפגוש RegExpים ב- VBS
    ואני צריך VBS צד שרת.
    אני בודק אם ה- ID שהועבר ב- QUERYSTRING הוא מספר שלם חיובי.

  5. הסבר למה לא cint
    cint מקבל ביטוי וממיר אותו לסוג מספר.
    אם הביטוי לא יכול להיות מספר אז יש שגיאה, ואני לא רוצה שתהיה שגיאה.
    לכן אני קודם בודק אם הביטוי יכול להיות מספר.
    כיוון שפונקציית ה- isnumeric מחזירה אמת גם במקרה של מספרים שליליים ועשרוניים החלטתי לבנות פונקצית isnumeric מותאמת אישית לצרכים שלי.

  6. MasterMind הגיב:

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

  7. ניר טייב הגיב:

    תעשו כך:


    dim isNum
    isNum = Request("qs")
    if cInt(isNum) then
    true
    else
    false
    End If

    במקום של true ו-false שנו לקוד שלכם

  8. אוריקס הגיב:

    המממ… לא משהו


    function fIsNumeric(num)
        if not isnumeric(num) then
            fIsNumeric = false
        else
            fIsNumeric = cint(num)>=0 and instr(num,".")=0
        end if
    end function
    x="1235"
    Response.write(fIsNumeric(x))

  9. ניר טייב הגיב:

    לא!
    אי אפשר להשתמש באופרטורים כדוגמאת <,>,>=,<= על טקסטים

  10. רום הגיב:

    שיהיה
    אני לא מבין ב- VBS, זה היה ניסיון לעזור… בכל מקרה הוא כבר קיבל מספיק עזרה

  11. ניר טייב הגיב:


    זה לא רק ב-VBS זה בכל שפת תכנות (יש שפה שעושה אחרת?!)

שלח תשובה