מחשביםתכנות

PHP (ביטוי רגיל) - מה זה? דוגמאות ובדיקות של ביטויים רגולריים

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

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

ביטויים רגולריים ב- PHP

שפת PHP מכילה שלושה מנגנונים לעבודה עם ביטויים רגולריים - "ereg", "mb_ereg" ו- "preg". הנפוץ ביותר הוא ממשק "preg", הפונקציות של אשר מספקים גישה לתמיכה PCR הרגיל ספריית תמיכה, שפותח במקור עבור שפת Perl, אשר כלול בחבילה PHP. Preg- חיפוש פונקציות במחרוזת טקסט שצוין של התאמה, על פי דפוס מסוים בשפה של ביטויים רגולריים.

יסודות התחביר

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

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

לדוגמה, הביטוי / d {3} - \ d {2} - \ d {2} / m, התוחם הוא "/" , ולאחר מכן הדפוס הולך, ותו "m" הוא התכונה.

כל העוצמה של ביטויים רגולריים מקודדת באמצעות מטא-תווים. המטצ'ראקטור העיקרי של השפה הוא קו נטוי הפוך - "\". זה משנה את סוג הדמות הבאה שלה אל ההפך (כלומר, אופי רגיל הופך metacharacter ולהיפך). Metacharacter חשוב נוסף הוא הקו הישיר "|", המציין וריאציות חלופיות של התבנית. דוגמאות נוספות של מטא-תווים:

^ התחלת אובייקט או מחרוזת
( תחילתו של תת-המשנה
) סוף הסאבפטרן
{ מקור הכמות
} סוף כמת
\ D ספרות עשרוניות מ -0 עד 9
\ D כל תו שאינו ספרה
\ S תו ריק, רווח, לשונית
\ W אופי מילון

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

סובפטרנס

ב PHP, subpatterns קבוע מוקצים בסוגריים ולפעמים נקרא "subexpressions". בצע את הפונקציות הבאות:

  1. הקצאת חלופות . לדוגמה, תבנית חום (משהו | ציפור |) עולה בקנה אחד עם המילים "חום", "פירבירד" ו "צלוי" . ובלי סוגריים, זה יהיה רק מחרוזת ריקה, "ציפור" ו "צלוי".

  2. "מרגש" subpattern. משמעות הדבר היא שאם מחרוזת המשנה בתבנית, כל ההתאמות מוחזרות כתוצאה מכך. לשם הבהירות, אנו נותנים דוגמה. את הביטוי הרגיל הבא ניתן: המנצח מקבל ((זהב מוזהב)) - ומחרוזת להתאמה: "הזוכה מקבל מדליית זהב" . בנוסף על הביטוי המקורי, כתוצאה של החיפוש יונפקו: "מדליית זהב" , "מדליה", "זהב" .

מפעילי חזרות (quadrifiers)

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

לתיאור החזרות, משמשות מחצלות - מטא-תווים לציון המספר. Quadrices הם משני סוגים:

  • כללי, סגורים בסוגריים;
  • מקוצר.

הכמות הכוללת מושפעת מהמספר המינימלי והמקסימלי של חזרות חוזרות של האלמנט בצורת שני מספרים בסוגריים מסולסלים, לדוגמה: x {2,5}. אם המספר המרבי של חזרות אינו ידוע, הארגומנט השני אינו מצוין: x {2,}.

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

1. * - אפס וחזרות יותר, שוות ערך ל- {0,}.

2. + חזרות אחת או יותר, כלומר {1,}.

3. - אפס או רק חזרה אחת - {0,1}.

דוגמאות לביטויים רגילים

למי ללמוד ביטויים רגולריים, דוגמאות הן הספר הטוב ביותר. אנחנו נותנים כמה להראות את הזדמנויות מספיק עם מינימום של מאמץ. כל קודי התוכנית תואמים לחלוטין ל- PHP 4.x וגירסאות גבוהות יותר. כדי להבין את התחביר ולהשתמש בכל תכונות השפה, אנו ממליצים על ספרו של ג'יי פרידל "ביטויים רגולריים", שבו התחביר מובן לחלוטין ויש דוגמאות לביטויים רגילים לא רק ב- PHP, אלא גם ב- Python, Perl, MySQL, Java, Ruby ו- C #.

בדיקת התקינות של כתובת הדואר האלקטרוני

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

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

לכן, הביטוי בודק את תוקפו של הדוא"ל צריך לבדוק את התנאים הבאים:

  1. נוכחות הסמל @ במחרוזת המקור והיעדר רווחים.
  2. חלק הדומיין של הכתובת, מחוץ לסמל @, מכיל תווים חוקיים בלבד עבור שמות דומיינים. אותו הדבר חל על שם המשתמש.
  3. בעת אימות שם המשתמש, עליך לקבוע אם קיימים תווים מיוחדים, כגון גרש או סרגל אנכי. סמלים אלה הם מסוכנים ויכולים להיות כלולים בהתקפות כגון זריקות של SQL. הימנע מכתובות אלה.
  4. שמות משתמשים מאפשרים רק נקודה אחת, שאינה יכולה להיות התו הראשון או האחרון במחרוזת.
  5. שם התחום חייב להכיל לפחות שני תווים ולא יותר משש תווים.

דוגמה המביאה בחשבון את כל התנאים הללו ניתן לראות בתרשים שלהלן.

אימות כתובות אתר

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

הפתרון. הגרסה הסופית שלנו היא כדלקמן:

/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6}) (\\\\\\ \ .-) *) * \ /? $ /

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

פריט 1 לפני כתובת האתר לא יכול להיות כל התווים
פריט 2 אנו בודקים את הקידומת חובה "http"
פריט 3 אין שם תווים
פריט 4 אם יש "s", אז כתובת האתר מצביע על חיבור מאובטח "https"
פריט 5 נדרש "//"
פריט 6 אין תווים
פריט 7-9 אימות של הנכונות של תחום ברמה הראשונה ואת הזמינות של נקודה
10-13 שליטה על נכונות כתיבת תחום ברמה השנייה נקודה
פריט 14-17

מבנה קובץ URL הוא אוסף של מספרים, אותיות, קווי משנה, מקפים, נקודות וחתכים בסוף

בדיקת מספרי כרטיסי אשראי

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

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

זה יותר קשה לכתוב ביטוי אוניברסלי שלוקח בחשבון רווחים אפשריים ו hyphens מאשר פשוט ירידה כל הסמלים למעט ספרות. לכן, בביטוי, מומלץ להשתמש Metacharacter / D, אשר מוחקת את כל התווים למעט ספרות.

עכשיו אתה יכול ללכת ישירות לאימות מספר. כל חברות כרטיסי האשראי משתמשות בפורמט מספר ייחודי. בדוגמה, זה משמש, הלקוח אינו צריך להזין את שם החברה - זה נקבע על ידי מספר. כרטיסי ויזה תמיד מתחילים עם 4 ויש להם אורך של 13 או 16 ספרות. MasterCard מתחיל בטווח של 51-55 עם אורך של מספר 16. כתוצאה מכך, אנו מקבלים את הביטוי הבא:

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

בדיקת מספרי טלפון

המשימה. בדיקת התקינות של מספר הטלפון שהוזן.

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

+ CCC.NNNNNNNNNxEEEE, היכן:

- C הוא קוד מדינה המורכב 1-3 ספרות.

- N - מספר עד 14 ספרות.

- E הוא הרחבה אופציונלית.

פלוס הוא אלמנט חובה, ואת סימן x קיים רק אם יש צורך הרחבה.

כתוצאה מכך, יש לנו את הביטוי הבא:

^ \ + [0-9] {1,3} \. [0-9] {4,14} (?: X. +)? $

מספרים בטווח

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

הפתרון. אנו נותנים מספר ביטויים לכמה מהמקרים הנפוצים ביותר:

לקבוע את השעה מ 1 עד 24 ^ (1 [0-2] | [1-9]) $
יום בתוך חודש 1-31 ^ (3 [01] | [12] [0-9] | [1-9]) $
שנייה או דקה 0-59 ^ [1-5]? [0-9] $
מספר בין 1 ל -100 ^ (100 | [1-9]? [0-9]) $
יום השנה 1-366 ^ 36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} | [1-9] [0-9]?) $

חפש כתובת IP

המשימה. עליך לקבוע אם המחרוזת שצוינה היא כתובת IP חוקית בתבנית IPv4 בטווח שבין 000.000.000.000-255.255.255.255.

הפתרון. כמו בכל משימה PHP, הביטוי הרגיל יש מספר אפשרויות. לדוגמה, זה:

מבחן מקוון של ביטויים

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

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

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 iw.unansea.com. Theme powered by WordPress.