ABA


"בדיקה אם השדה מכיל רק מספרים | בעיה בJS"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #12303 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 12303
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   01:56   16.06.07   
אל הפורום  
  בדיקה אם השדה מכיל רק מספרים | בעיה בJS  
 
   ערכתי לאחרונה בתאריך 16.06.07 בשעה 02:04 בברכה, ronen333
 
עם תשובות כדייום שני הזה יש את הבגרות באינטרנט אז רציתי להכין לעצמי כבר "שליפים" מוכנים במחשב לא להתעקב..
אקיצר ניסתי לעשות בJS בדיקת תקינות קלט שבודקת אם השדה מכיל רק מספרים.
אבל זה לא פועל משום מה...
אשמח אם מישהו יענה לי בהקדם למה זה דיי דחוף P=

הקוד-


<html>
<head>
<title>בדיקת ספרות בגאווה סקריפט</title>
<script language="javascript">
function check_field
{
var onlynum="1234567890";
var dtext=document.myform.numb.value;

var booli=true;
for(i=0;i<onlynum.length;i++)
{
if(dtext.indexOf(onlynum.charAt(i))!=-1)
{
booli=false;
}
}
if(booli==false)
{
alert("error");
return false;
}

return true;
}
</script>
</head>
<body>


<form name="myform" onsubmit="return check_field();">
<input type="text" name="numb">
<input type="submit">
</form>

</body>
</html>

]

ניסתי לעשות את זה גם עם לולאה מקוננת, גם לא פועל-


<html>
<head>
<title>בדיקת ספרות בגאווה סקריפט</title>
<script language="javascript">
function check_field
{
var onlynum="1234567890";
var dtext=document.myform.numb.value;

var dmone=0;
for(i=0;i<onlynum.length;i++)
{
for(j=0;j<dtext.length;j++)
{
if(dtext.charAt(i)==onlynum.charAt(j))
{
dmone=dmone+1;
}

}
}

if(mone>0)
{
alert("error");
return(false);
}
return(true);

}
</script>
</head>
<body>


<form name="myform" onsubmit="return check_field();">
<input type="text" name="numb">
<input type="submit">
</form>

</body>
</html>

תודה מראש לעוזרים!


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  קבל בREGEX bmaorlo  16.06.07 02:42 1
  אחי, בוא נחשוב שניה... MeToR 16.06.07 04:10 2
     מגניב תודה לא ידעתי על הפונקציה הזאת... ronen333  16.06.07 10:26 3
         גם אני לא ידעתי עליה:S akoka 16.06.07 10:28 4
             חחח טוב שיש בית ספר :) MeToR 16.06.07 12:55 6
         שימוש לא בפונקציה מוכנה במקרה הזה היא טעות. Ice Cold  16.06.07 12:34 5
             אני אשתמש בפונקציה שהוא רשם. ronen333  16.06.07 13:12 7
                 להפך סביר מאוד להניח שהוא לא משתמש בלולאות, אולי RE. Ice Cold  16.06.07 14:28 8
                     איך זה עובד- לא ממש חשוב לי עכשיו. ronen333  16.06.07 17:31 9
  ANYONE? :( ronen333  17.06.07 11:05 10
  תסתכל: FireAngel 17.06.07 11:55 11
     מכתב ronen333  17.06.07 12:43 12
         אבל למה לא REGEX? הרבה הרבה הרבה יותר יעיל Sn00py  17.06.07 21:35 13
             אין לי בדיוק מושג מה זה ולכן אני מעדיף שלא להשתמש בזה ronen333  17.06.07 22:22 14

       
bmaorlo 
חבר מתאריך 13.4.03
4770 הודעות, דרג אמינות חבר זה
   02:42   16.06.07   
אל הפורום  
  1. קבל בREGEX  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 16.06.07 בשעה 02:42 בברכה, bmaorlo
 

<script>
function isNumeric(num){
var pat = /^+$/m;
return pat.test(num);
}

alert(isNumeric("123"));
</script>


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MeToR
חבר מתאריך 26.1.07
11 הודעות, דרג אמינות חבר זה
   04:10   16.06.07   
אל הפורום  
  2. אחי, בוא נחשוב שניה...  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 16.06.07 בשעה 04:11 בברכה, MeToR
 
אם השדה מכיל רק מספרים, זאת אומרת שהערך בשדה הוא מספר.
כדי לבדוק אם ערך בשדה הוא מספר או טקסט, יש את הפונקציה: isNaN,
שמחזירה 'אמת' אם הערך בשדה הוא טקסט, ו'שקר' אם הוא מספר.
בקיצור:

if (!isNaN(yourField))
הערך בשדה הוא מספר, כלומר יש בו רק מספרים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   10:26   16.06.07   
אל הפורום  
  3. מגניב תודה לא ידעתי על הפונקציה הזאת...  
בתגובה להודעה מספר 2
 
   ערכתי לאחרונה בתאריך 16.06.07 בשעה 10:33 בברכה, ronen333
 
אבל אחי יש מצב שאתה גם אומר לי מה הטעות במה שאני עשיתי?
כי מבחינה אלגורתמית זה אמור להיות תקין.

תודה רבה לכם

נב-זה לא שהפתרון שלך לא מספק אותי, אני פשוט רוצה לדעת להתמודד עם דברים בדרך של לא להשתמש תמיד ב'פונקציות מוכנות'.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

דרג אמינות חבר זה
   10:28   16.06.07   
אל הפורום  
  4. גם אני לא ידעתי עליה:S  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MeToR
חבר מתאריך 26.1.07
11 הודעות, דרג אמינות חבר זה
   12:55   16.06.07   
אל הפורום  
  6. חחח טוב שיש בית ספר :)  
בתגובה להודעה מספר 4
 
   ערכתי לאחרונה בתאריך 16.06.07 בשעה 12:55 בברכה, MeToR
 
למדנו אותה שנה שעברה בבית ספר במגמת מחשבים חחחח

רונן, אני הולך עכשיו, אבל כשאחזור בעזרת השם אסתכל מה הבעיה ואנסה להסביר לך :|


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   12:34   16.06.07   
אל הפורום  
  5. שימוש לא בפונקציה מוכנה במקרה הזה היא טעות.  
בתגובה להודעה מספר 3
 
יש פונקציות מוכנות שעובדות ה-ר-ב-ה יותר מהר ויותר יעיל מהקוד שאתה רשמת, גם אם תתקן אותו. אין טעם להתמהמה בפונקציה שלא עובדת, כשהיא הפיתרון כי לא נכון לעשות משהו.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   13:12   16.06.07   
אל הפורום  
  7. אני אשתמש בפונקציה שהוא רשם.  
בתגובה להודעה מספר 5
 
   ערכתי לאחרונה בתאריך 16.06.07 בשעה 13:30 בברכה, ronen333
 
אני פשוט רוצה להבין איפה הטעות שלי כי יהיה דברים שלא יהיה בהם פונקציות מוכנות והרעוין הוא יכול להתעורר כאותו רעיון.

ובמדעי המחשב למשל אין פונקציה ISNAN או משהו דומה(למיטב ידעתי) ואני מעדיף להראות לה משהו שהוא לוגי מאשר משהו שהוא מוכן.

וכמו שאמרתי, חשוב לי לדעת עוד דרכים ולגלות איפה הטעויות שלי בכתיבה של הJS, כי היא עלולה לשאול אותי שאלות מלבד לבדוק שזה רק מספרים.


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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   14:28   16.06.07   
אל הפורום  
  8. להפך סביר מאוד להניח שהוא לא משתמש בלולאות, אולי RE.  
בתגובה להודעה מספר 7
 
מאיפה הבאת את זה ש-REGULAR EXPRESSION עובד מאחורה עם לולאות ??


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   17:31   16.06.07   
אל הפורום  
  9. איך זה עובד- לא ממש חשוב לי עכשיו.  
בתגובה להודעה מספר 8
 
   חשוב לי לדעת איפה טעיתי בקוד.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   11:05   17.06.07   
אל הפורום  
  10. ANYONE? :(  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
FireAngel

דרג אמינות חבר זה
   11:55   17.06.07   
אל הפורום  
  11. תסתכל:  
בתגובה להודעה מספר 0
 
   נתחיל מהלולאה הראשונה ואחר כך נעבור ללולאה המקוננת, כי רואים שאתה "מנסה" עד שתמצא פתרון. פתרון לא יגיע משמיים ככה.

הקוד הראשון:
עברת על הטקסט onlynum תו תו ושאלת את הדבר הבא:
"האם התו 1 מופיע בטקסט או לא?", אם לא, תן שגיאה.
"האם התו 2 מופיע בטקסט או לא?", אם לא, תן שגיאה.
וכו'.

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

לדוגמה טקסט שאמור "להתקבל" בפונקציה זו: 222, אך אין לה 0 , 1 , 3 וכו' ולכן היא מקבלת שגיאה.

הקוד השני:


var dmone=0;
for(i=0;i<onlynum.length;i++)
{
for(j=0;j<dtext.length;j++)
{
if(dtext.charAt(i)==onlynum.charAt(j))
{
dmone=dmone+1;
}

}
}


שים לב שלא השתמשת באינדקסים הנכונים בבדיקה. ל-dtext עפ"י הלולאה שהרכבת צריך לשים את j ול-onlynum צריך לשים את i.

עכשיו לבדיקת הלוגיקה (במידה והשינוי שאמרתי חל):
אתה עובר על הטקסט שמכיל את כל הספרות (מ-0 עד 9).
לוקח את הספרה הראשונה שמופיעה ואיתה רץ על הטקסט dtext.
אתה בודק האם הספרה שלקחת מופיעה ב-dtext, אבל אם נחשוב, היא לא חייבת להופיע (ראה קוד א' ובחינת הלוגיקה שלו).

בעיקרון מה שצריך לעשות הוא דבר כזה:
לרוץ על הטקסט dtext בלולאה חיצונית, לרוץ על הטקסט onlynum בלולאה פנימית.
לקחת את האות שכרגע הלולאה עליה עם charAt ב-dtext ואיתה לרוץ על כל הטקסט onlynum.
ואז אתה בודק: האם האות שלקחנו מ-dtext שווה לאות ב-onlynum באחד המיקומים שלו? (כי הרי אנחנו עוברים עם אות אחת על כל הספרות האפשריות).
אם מצאנו, הרי שאות זו היא ספרה.

מקווה שלא סיבכתי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   12:43   17.06.07   
אל הפורום  
  12. מכתב  
בתגובה להודעה מספר 11
 
   חיפשתי אחרי תוכנה שעושה DEBBUGING ומצאתי את השגיאה שלי בדרך הראשונה, שחכתי לעשות בפונקציה סוגריים, ואיף של המונה רשמתי MONE במקום DMONE.
תיקנתי וזה פועל.
הרעיון שלי הוא לא היה לתת שגיאה בכל פעם, הרעיון שלי היה להשים בוליאן שהוא "אמת" ואז לבדוק האם תו במחרוזת ONLYNUM מפיע בDTEXT אם כן הבוליאני הופך לשקר, אם לא הוא פשוט מדלג למספר הבא עד אשר הוא נגמר.
אם הבוליאני אמת אז אין ארור אם הוא שקר זאת אומרת שיש מספר ולכן תציג ארור.


בדרך השניה פשוט הייתי מסטול כי זאת הייתה שעה מאוחרת (2 לפנות בוקר אם אני לא טועה XD ) וכמו שאמרת בטעות החלפתי בין הJ לI, הLENGTH התבלבל וכל העסק נדפק.

הפעם אני אפנה פחות לעזרה כי סוף סוף יש לי דיבאגר.
אני מודה לכם מאוד על העזרה, תודה רבה לכולם


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות, דרג אמינות חבר זה
   21:35   17.06.07   
אל הפורום  
  13. אבל למה לא REGEX? הרבה הרבה הרבה יותר יעיל  
בתגובה להודעה מספר 12
 
  

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   22:22   17.06.07   
אל הפורום  
  14. אין לי בדיוק מושג מה זה ולכן אני מעדיף שלא להשתמש בזה  
בתגובה להודעה מספר 13
 
   כרגע...
אחרי הכל אני צריך להסביר לבוחנת מה אני עושה, עדיף שזה יהיה פרי ידי ולא משהו שעובד ואני לא מבין ב100%


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net