תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

פונקציות מחרוזת של PHP

מחבר:
בתאריך:

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

   

הפונקציות strlen ו- mb_strlen

הפונקציה strlen מחזירה את אורך המחרוזת כולל רווחים. לדוגמה:

$str = 'a string';
echo strlen($str);

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

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

$str = 'מחרוזת בעברית';
echo mb_strlen($str, 'utf-8');

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

   

הפונקציות strstr ו- stristr

הפונקציה strstr מחפשת מחרוזת א' בתוך מחרוזת ב', ואחרי שנמצאת ההתאמה מחזירה את שארית מחרוזת ב'. בדוגמה הבאה, הפונקציה מחפשת את המילה String, ומחזירה את שארית המחרוזת:

$tutorial  = 'PHP Tutorial | String functions ';
echo $headline = strstr($tutorial, ' String ');

והתוצאה היא הבאה:

String functions

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

$tutorial  = 'PHP Tutorial | String functions ';
echo $headline = stristr($tutorial, 'STRING');

למרות שהקריטריון להפרדה הוא STRING, עדיין נקבל את התוצאה הרצויה לנו. כך זה ייראה:

String functions

באופן כללי, פונקציות רבות שכוללות את i בתוכן אינן רגישות לגודל האותיות (case insensitive).

 

כיצד למצוא האם מחרוזת נמצאת בתוך מחרוזת אחרת?

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

בדוגמה הבאה, אנחנו בודקים האם המחרוזת "you" קיימת בתוך המחרוזת "Where are you?"

$a = 'Where are you?';

if (strpos($a, 'you') !== false) {
    echo 'true';
}

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

   

הפונקציה str_replace

הפונקציה str_replace יודעת להחליף מחרוזת אחת במחרוזת אחרת. בדוגמה הבאה, מוחלף $ ב-#.

$langs = "HTML $ JavaScript $ PHP";
echo $langs_replace = str_replace("$", " #", $langs);

וכך נראית המחרוזת אחרי ההחלפה:

HTML # JavaScript # PHP

 

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

 

הפונקציות strops ו-strrpos

הפונקציה strops מחזירה את מיקום התו הרצוי הראשון במחרוזת. בדוגמה המצורפת אנחנו מחפשים את התו @ במחרוזת 'contact@reshetech.co.il'.

$email = 'contact@reshetech.co.il';
$search_for   = '@';
echo $position = strpos($email, $search_for);

דוגמת הקוד הזו תחזיר: 7 מפני ש-@ הוא התו השמיני במחרוזת, ומחשבים מתחילים לספור מאפס.

   

אם אנחנו רוצים את מיקום התו האחרון הרצוי לנו במחרוזת נשתמש ב-strrpos. בדוגמה המצורפת אנחנו מעוניינים במיקומה של הנקודה האחרונה במחרוזת.

$string = "str1.str2.str3.str4";
echo $position = strrpos($string, '.');

התשובה שתחזור 13 לפי מיקום הנקודה האחרונה במחרוזת.

באופן כללי הפונקציות ש-r (קיצור של reverse) התווסף לשמן מחזירות תשובות מהסוף.

 

הפונקציה substr

הפונקציה substr מחזירה תת מחרוזת לפי מיקום התו (מתחילים לספור מאפס) ואורך המחרוזת.

אם אנחנו רוצים את תת-המחרוזת שאורכה שלושה תווים והיא מתחילה מהתו הראשון, ננסח זאת כך:

echo substr('012345', 0, 3);

והתוצאה: 012

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

echo substr('012345', 1);

והתוצאה כוללת את כל המחרוזת מלבד התו הראשון: 12345.

ובאופן דומה, אם אנחנו רוצים תת-מחרוזת שמתחילה בתו שני ואורכה שלושה תווים, נכתוב זאת כך:

echo substr('012345', 1, 3);

והתוצאה בהתאם: 123

   

דוגמה מעשית: הפרדת ההרחבה (extension) משם הקובץ

ההרחבה (extension) בדרך כלל מעידה על סוג הקובץ. לדוגמה, png, jpeg ו-jpg  לתמונות או txt לקבצי טקסט. רצוי לדעת מהי ההרחבה כשגולשים מעלים קבצים לאתר. כדי לברר את ההרחבה שעמה עלה הקובץ לשרת, נצטרך להשתמש בשילוב של מספר פונקציות ביחד.

משתנה $file מכיל את שם הקובץ:

$file = "filename.1.TXT";

נברר את מיקומה של הנקודה האחרונה במחרוזת בעזרת strrpos:

$pos = strrpos($file, '.'); // 10

substr יחזיר את כל מה שמימין לנקודה, כולל הנקודה. לכן, נוסיף ל-$pos אחד כדי שתת-המחרוזת תכלול רק את ההרחבה, ללא הנקודה.

$extension = substr($file, $pos+1); // TXT

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

$lwr_ext = strtolower($extension); // txt

והתוצאה היא txt לפי ההרחבה של הקובץ.

   

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

echo $ext = strtolower(substr($file, strrpos($file, '.')+1));

השרשור מתאפשר מפני ש-PHP  קורא מהפונקציה הפנימית ביותר לחיצונית ביותר.

 

דוגמה מעשית: הוספת קידומת בינ"ל למספרי טלפון

function formatIsraeliPhoneNumber($phoneNumber) {
    // Remove any non-numeric characters from the phone number
    $phoneNumber = preg_replace('/D/', '', $phoneNumber);

    // Check if the number starts with '0'
    if (substr($phoneNumber, 0, 1) === '0') {
        // Replace '0' with '+972'
        $phoneNumber = '+972' . substr($phoneNumber, 1);
    }

    return $phoneNumber;
}

// Example usage:
$phoneNumber = '052-123-4567';
$formattedPhoneNumber = formatIsraeliPhoneNumber($phoneNumber);
echo $formattedPhoneNumber; // Output: +972521234567

נסביר:

  1. הפונקציה preg_replace() משמשת להסרת כל התווים שאינם מספרים מקלט הפונקציה. פונקצייה זו שייכת לעולם המרתק של ביטויים רגולריים ב-PHP, ואם הגעתם עד לפה אז תעשו לעצמכם טובה ותלמדו את הנושא. אפשר גם באמצעות המדריך ביטויים רגולריים ב-PHP.
  2. לאחר מכן, בודקים אם מספר הטלפון מתחיל ב-'0' באמצעות substr(). אם כן, מחליפים את ה-'0' המוביל בקידומת הבינ"ל של ישראל +972.
  3. הפונקציה מחזירה את מספר הטלפון המפורמט.

 

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

לכל מדריכי ה-PHP

 

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

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

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך אומרים בעברית אינטרנט?

 

תמונת המגיב

אסף בתאריך: 18.11.2017

מה עדיף לדעתך ביטויים רגולריים או מסנן?