PracticU

RegEx in JavaScript

בלי כתוביותעם כתוביות
PracticU › קורס Javascript כולל JQuery › RegEx in JavaScript
מילון מושגים:
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
PHP - שפת תכנות לצד השרת, נפוצה בבניית אתרים דינמיים ומערכות ניהול תוכן כמו WordPress.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
הקסדצימלי - שיטת ספירה בבסיס 16, המשתמשת בספרות 0-9 ובאותיות A-F, ונפוצה לייצוג ערכים בינאריים בקצרה.

RegEx in JavaScript

בשיעור זה אנו לומדים את שפת הביטויים הסדירים Regular Expressions באמצעות האובייקט RegExp של ג'אווה סקריפט. אנו מכירים את כל אבני הבניין של השפה, החל מהתווים המיוחדים והקבוצות ועד לטווחים, הספירות והקיצורים, ומיישמים את הידע בבניית ביטויים לאימות מיקוד ישראלי, טלפון סלולרי וכתובת אימייל.
נושאי הסיכום המוצגים בשיעור:
1. מהו Regular Expression: מנוע חיפוש והתאמה שאינו תלוי בשפת תכנות מסוימת וקיים בדוטנט, ב-Perl, ב-PHP, בג'אווה סקריפט ובשפות רבות נוספות. הוא מקבל ביטוי המוגדר בשפה מיוחדת ובודק עבור מחרוזת נתונה האם היא מכילה את הביטוי, היכן וכמה פעמים, או האם היא עומדת בתקן שהגדרנו.
2. האובייקט RegExp והפונקציה test: בג'אווה סקריפט פותחים משתנה מטיפוס RegExp שמקבל בסוגריים את הביטוי המוגדר בין שני סלאשים, למשל ביטוי abc. קריאה לפונקציה test עם מחרוזת מחזירה true או false לפי ההתאמה.
3. חיפוש תת-מחרוזת: ברירת המחדל היא חיפוש הביטוי בכל מקום במחרוזת, כך שהביטוי abc מתאים ל-m מחרוזת tabc או tabcw מכיוון שabc קיים בתוכן, אבל לא למחרוזת שאין בה את הרצף הזה, ואז מתקבל false.
4. סמן i לאי-רגישות לאותיות: כברירת מחדל החיפוש הוא case sensitive, והוספת התו i אחרי הסלאש המסיים הופכת את החיפוש ל-case insensitive כך שהביטוי מוצא גם אותיות קטנות וגם אותיות גדולות.
5. תחילה וסוף המחרוזת: התו קראט, שיפט 6 במקלדת, מציין שהביטוי חייב להופיע החל מהתו הראשון של המחרוזת, והתו דולר מציין שהביטוי חייב להסתיים בתו האחרון, וכך הביטוי מתאים רק למחרוזת ששווה במלואה לביטוי.
6. הנקודה כשמירת מקום: נקודה מציינת any single character, כלומר שמירת מקום לתו אחד ויחיד מכל סוג. לדוגמה הביטוי do נקודה מתאים ל-dog, ל-dot ול-doe, ובביטוי abc נקודה נקודה def חייבים להיות בדיוק שני תווים כלשהם בין abc ל-def, אחרת מתקבל false.
7. כוכבית: הכוכבית מציינת 0 או יותר חזרות של הביטוי שלפניה. לדוגמה בביטוי ab ואז c כוכבית, מחרוזת ab מתאימה כי יש 0 חזרות של c, מחרוזת abccc מתאימה כי יש כמה חזרות, ומחרוזת abx נכשלת בגלל הדולר שדורש שהמחרוזת תסתיים בדיוק אחרי ה-ab והחזרות.
8. פלוס: הפלוס מציין אחת או יותר חזרות של הביטוי שלפניו, כלומר חייבת להיות לפחות חזרה אחת. מחרוזת abc ו-abcccc מתאימות ל-bיטוי ab פלוס c, אבל מחרוזת ab בלבד מחזירה false מכיוון שאין אפילו c אחת.
9. סימן שאלה: סימן השאלה מציין 0 או 1 מהביטוי שלפניו, כך שלביטוי ab ואז c סימן שאלה יש רק שתי צורות אפשריות: ab או abc. מחרוזת ab מחזירה true, מחרוזת abc מחזירה true, ומחרוזת abcccc מחזירה false מכיוון שיש יותר מ-c אחת. שלושת הסמנים כוכבית, פלוס וסימן שאלה מתייחסים תמיד לביטוי שלפניהם.
10. סוגריים עגולים לקבוצות והקו האנכי: סוגריים מציינים קבוצה ובתוכם אפשר לכתוב כמה אפשרויות מופרדות בקו אנכי. לדוגמה בביטוי ab ואז סוגריים עם c או d או e, מחרוזת abc וגם abd וגם abe מתאימות, ו-abf מחזירה false. הסוגריים יכולים להחזיק מילים שלמות כמו מוישה או אלי. כאשר מוסיפים פלוס אחרי הסוגריים הוא מתייחס לכל הקבוצה, כך שמחרוזת abcece מתאימה כי יש אחד או יותר תווים מתוך הקבוצה.
11. סוגריים מרובעות: סוגריים מרובעות מתארות תו אחד ויחיד מתוך סדרת התווים שבתוכן. בביטוי ab ואז סוגריים מרובעות עם c, d ו-e, מחרוזת abc מתאימה וגם abd מתאימה, אבל מוישה לא מתאימה כי הסוגריים המרובעות מתייחסות לתו בודד ולא למילה שלמה, בניגוד לסוגריים העגולים.
12. טווחי ערכים בסוגריים מרובעות: בתוך הסוגריים המרובעות אפשר להגדיר טווחים כמו a עד z עבור אותיות קטנות, A עד Z עבור אותיות גדולות, ו-0 עד 9 עבור ספרות, ואפשר לשלב כמה טווחים יחד כדי לתאר תו שהוא או ספרה או אות קטנה או אות גדולה. תו מינוס שרוצים לחפש כתו לגיטימי ממקמים בתחילת הרשימה, וכך גם תווים נוספים כמו קו תחתון.
13. שלילה עם קראט בתוך סוגריים מרובעות: קראט בתחילת הסוגריים המרובעות מציין את ההפך, תו אחד ויחיד שאינו נמצא ברשימה. לדוגמה בביטוי ab ואז סוגריים מרובעות עם קראט וטווח 0 עד 9 ואותיות a עד z ו-A עד Z, המחרוזת abp מחזירה false כי p כן נמצאת ברשימה, ואילו פסיק או נקודותיים מחזירים true כי הם אינם ספרה ואינם אות.
14. סוגריים מסולסלות לספירה: סוגריים מסולסלות עם מספר יחיד דורשות שהביטוי שלפניהן יופיע בדיוק במספר הזה של פעמים, כמו ab ואז b ארבע פעמים. סוגריים עם מספר ופסיק קובעים מינימום חזרות, וסוגריים עם שני מספרים מופרדים בפסיק קובעים מינימום ומקסימום, כמו ביטוי שדורש מ-a ואז בין ארבע לשש ספרות, כאשר שבע ספרות כבר מחזירות false.
15. קיצורים לספרות ותווים אלפא-נומריים: backslash d קטנה מחליפה את טווח הספרות 0 עד 9 ומתארת ספרה בודדת, ו-backslash d גדולה מתארת את ההפך, כל תו שאינו ספרה. backslash w קטנה מתארת תו אלפא-נומרי, כלומר אות קטנה או גדולה או ספרה או קו תחתון, מה שמתאים לשמות משתנים, ו-backslash w גדולה מתארת תו שאינו אלפא-נומרי, כמו נקודותיים או מינוס.
16. תווי רווח לבן ותווי בקרה: backslash s קטנה מתארת רווח לבן כלשהו, הכולל טאב, enter, חזרה לתחילת השורה ו-form feed שהוא page down, ו-backslash s גדולה מתארת תו שאינו רווח לבן. קיימים גם תווים מיוחדים לחיפוש ישיר כמו backslash n עבור enter, backslash r עבור חזרה לתחילת שורה, backslash t עבור טאב, backslash e עבור escape, ו-backslash x ואז מספר עבור תו לפי ערך הקסדצימלי.
17. גבולות מילים: בנוסף לקראט ולדולר המציינים תחילה וסוף מחרוזת, backslash b מציין גבול מילה, כלומר רווח בין מילים שיכול להיות תחילת מילה או סוף מילה, ו-backslash b גדולה מציינת כל מקום שאינו גבול מילה, כלומר אמצע מילה.
18. בניית ביטוי למיקוד ישראלי: מיקוד ישראלי מוגדר כחמש ספרות שאסור שיתחילו באפס. בונים ביטוי המתחיל בקראט ומסתיים בדולר, כאשר התו הראשון מתואר בטווח 1 עד 9 כי backslash d כולל גם 0, ולאחריו ארבע ספרות בעזרת backslash d וסוגריים מסולסלות 4. מיקוד 95678 מחזיר true, ואילו מיקוד שמתחיל ב-0, מיקוד עם יותר מדי ספרות או עם מעט מדי ספרות מחזירים false.
19. בניית ביטוי לטלפון סלולרי: טלפון נייד ישראלי הוא 05 ואז ספרה כלשהי, ואז מינוס שהוא לא חובה ואם הוא מופיע הוא מופיע פעם אחת בלבד, ומתואר בסימן שאלה, ואז ספרה שאינה 0 בטווח 1 עד 9 ואז שש ספרות נוספות בביטוי backslash d סוגריים מסולסלות 6. הביטוי מאשר מספר עם מינוס וגם בלי מינוס, אך דוחה שני מינוסים, מספר קצר מדי, מספר שמתחיל ב-0 בספרה הראשונה של השבעה, ומספר שאינו מתחיל ב-05.
20. שימוש בביטויים מוכנים מהאינטרנט: עבור פורמטים מורכבים כמו כתובת אימייל אפשר לחפש בגוגל regular expression email, להעתיק ביטוי מוכן ולהתאים אותו. בביטוי שהועתק מוסרים את backslash b מההתחלה ומהסוף כי הגדרנו קראט ודולר, ומוסיפים i לאי-רגישות לאותיות. הביטוי בודק אות או ספרה או נקודה או קו תחתון או אחוז או מינוס, אחד או יותר פעמים, ואז שטרודל, ואז תו דומה אחד או יותר, ואז נקודה, ואז שתיים עד ארבע אותיות. אימייל תקין מחזיר true, ואימייל עם שני שטרודלים מחזיר false.
בסיום השיעור למדנו את שפת הביטויים הסדירים ואת כל התווים, הקבוצות, הטווחים והספירות שלה, ובנינו בעצמנו ביטויים לאימות מיקוד ישראלי, טלפון סלולרי וכתובת אימייל, וראינו כיצד אפשר להיעזר בביטויים מוכנים מהאינטרנט ולהתאים אותם לצרכינו. תודה רבה, ולהתראות בשיעור הבא.
בשיעור הבא נעסוק בנושא Validations.
SR623HE
מילון מושגים:
קוד מקור - הקוד שמפתחים כותבים בשפת תכנות, לפני הידור, המגדיר את פעולת התוכנה.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.

להורדת קוד מקור של כל הדוגמאות בקורס  JAVA SCRIPT למתחילים -לחץ כאן לתלמידי המכללה בלבד

להורדת קוד מקור של כל הדוגמאות בקורס  JAVA SCRIPT למתקדמים- לחץ כאן לתלמידי המכללה בלבד

פרקי ההרצאה: RegEx in JavaScript

  1. 00:00

    מהו regular expression

  2. 01:52

    יצירת אובייקט RegExp

  3. 02:53

    בדיקה עם test

  4. 05:16

    התעלמות מגודל אותיות

  5. 06:27

    תחילת וסוף מחרוזת

  6. 08:22

    הסימן נקודה בביטוי

תמלול ההרצאה: RegEx in JavaScript

הטקסט המלא של הדקות הראשונות בהרצאה «RegEx in JavaScript» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

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

  2. 00:27

    יש את זה בשפה שנקראת PHP, בג'אווה סקריפט ובעוד המון המון שפות אחרות. התפקיד של המנוע הזה זה לקחת איזשהו ביטוי שאנחנו מגדירים לו בשפה מיוחדת שנקראת regular expression ואז אם אנחנו נותנים לו מחרוזת אז הוא אומר לנו כל מיני דברים לגבי המחרוזת הזאת בהקשר לביטוי הזה. לדוגמה האם המחרוזת הזאת מכילה את הביטוי שאנחנו תיארנו בתוכה או איפה היא מכילה בדיוק או כמה פעמים היא מכילה את הביטוי הזה

  3. 00:56

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

  4. 01:14

    אז שווה מאוד ללמוד את השפה הזאת שנקראת regular expression בכדי לדעת איך אנחנו מבצעים בדיקות על מכרוזות עבור פורמטים מסוימים שאנחנו מחפשים.

  5. 01:25

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

  6. 01:52

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

  7. 02:17

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

  8. 02:36

    בואו נניח שאני מכניס ביטוי את המחרוזת ABC. אז עכשיו אני הגדרתי בעצם איזשהו regular expression משתנה שאומר שהביטוי שהוא מחפש או רוצה לבדוק זה ABC. עכשיו אנחנו יכולים לקחת ולבדוק האם הביטוי הזה נמצא במחרוזות מסוימות.

  9. 03:01

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

  10. 03:22

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

  11. 03:39

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

  12. 03:53

    אנחנו רואים שמוצגת לנו הודעה true. אוקיי, בואו ניתן עכשיו ביטוי אחר. בואו ניתן לדוגמה ביטוי tabc. נריץ, נקבל גם true.

  13. 04:11

    בואו נראה למה קיבלנו true. אז למעשה מה שקרה זה שהמערכת קיבלה ביטוי abc בתור regular expression, ואומרת דבר כזה: בואו נחפש האם בכל המחרוזת שאנחנו נותנים קיימת המחרוזת abc.

  14. 04:31

    בדיוק ככה. אם אני אגדיר a,b ובוא נגיד לדוגמה w,c אז לא קיימת לי המחרוזת a,b,c בשום מקום בתוך הביטוי שלי.

  15. 04:44

    כלומר הביטוי a,b,c לא קיים בשום מקום כ-a,b,c בתוך המחרוזת. בואו נריץ את זה כעת וכמובן שאנחנו מקבלים false.

  16. 04:55

    המחרוזת לא קיימת שם. אם יש לי a,b,c או יותר נכון t ואז a,b,c ואז w כעת המחרוזת a,b,c כן קיימת לי איפשהו ולכן קיבלנו true. עכשיו בואו נראה כל מיני דברים שקשורים ל-Fat Regular Expression שהגדרנו פה בכדי להתחיל ללמוד את השפה ואז לדעת איך להשוות כל מיני מכרוזות

  17. 05:26

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

  18. 05:39

    נניח שמתאים לי שהיא תמצא לי גם את ABC באותיות קטנות. כעת הביטוי אומר לי אני מחפש ABC באותיות גדולות.

  19. 05:47

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

  20. 06:13

    בואו נבדוק כרגע ואנחנו רואים שעכשיו הוא גם הצליח למצוא את הביטוי. הדבר הבא שאנחנו רוצים לראות ואני רוצה שהוא ימצא לי את הביטוי רק אם הביטוי שווה בדיוק ל-ABC.

  21. 06:31

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

  22. 06:39

    בשביל להגדיר את הדבר הזה אני צריך להגיד שהוא יתחיל לחפש את ABC ישר מההתחלה, וזה תו שנקרא קראט, שיפט 6 במקלדת, וזה אומר תתחיל לחפש את הביטוי מההתחלה.

  23. 06:56

    ובשביל להגיד לו תסיים לחפש את הביטוי בדיוק בסוף, אז אחרי הביטוי אני מגדיר דולר. דולר מציין ברגולר אקספרשן התו האחרון לגמרי שנמצא במחרוזת.

  24. 07:13

    כעת הוא אמור להחזיר false מפני שאין שום מחרוזת שנקראת ABC באותיות קטנות או באותיות גדולות שמתחילה מההתחלה ומסתיימת בדיוק בסוף, מפני שהמחרוזת שלי מתחילה בכלל ב-T ומסתיימת ב-W.

  25. 07:28

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

  26. 07:47

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

  27. 08:13

    בואו נפתח אותה ונתחיל לראות אחד אחד מהדברים שקיימים בשפה הזאת. נתחיל עם הסימן נקודה. נקודה מציינת any single character. זאת אומרת שיש לנו פה בעצם כמו שמירת מקום לכל תו שהוא אחד ויחיד.

  28. 08:40

    אוקיי, זאת אומרת שאם אנחנו מגדירים ביטוי ברגע שנקרא do נקודה אז הוא יתאים ל-dog או ל-dot או ל-doe וכולי. אם נגדיר d.r אז הוא יתאים לכל דבר שהוא יכול להיות תו בודד d-o-o-r d-e-e-r כמובן ויכול להיות גם תווים שהם לא אותו דבר.

  29. 09:08

    בואו נבדוק את זה. נגדיר ברגולר אקספרשן a-b-c.d-e-f זאת אומרת שאנחנו מחפשים ביטוי שמתחיל ב-a-b-c בגלל שיש לנו i כאן זה אומר שהוא לא חייב להיות תואם מבחינת אותיות קטנות ואותיות גדולות.

  30. 09:35

    כאן ישנן שמירה לשני תווים, בואו נגיד שהתו הבא שלנו זה U גדולה והתו 6. ולאחר מכן DEF כי תווים שעומדים כמו שהם זה אומר שאנחנו מחפשים בדיוק את התווים האלה. כעת המערכת אמורה לתת לי true לגבי ההתאמה כי זה בדיוק מתאים.

לקורס המלא: קורס Javascript אונליין

ההרצאה הקודמת: DOM

ההרצאה הבאה: Validations

הרצאות קשורות מקורסים אחרים

  • RegEx in Python
  • Javascript in JavaSelenium
  • שפת JavaScript - משתנים
  • XSS - פריצה לאתר עם Javascript

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React
  • קורס NodeJS