עריכת מחרוזת עם מספרי פלאפון
-
אני רוצה לערוך רשימת מספרי טלפון למבנה אחיד, כלומר לעבור על כל מספר ולהוריד משם מקף אמצעי פסיק ריווח נקודה, וכל מה שעולה לאנשים כשהם רושמים מס פלאפון.
const p = '058-46453434,054-848645489,052658845855.052372568166,054-840056985,0536.26569252,052-457157793,0' console.log(p.replace(/-/gi, ''));
זה עובד נהדר אבל רק לתו אחד, לא הצלחתי לכתוב את ה'או' שאר הדברים, כלומר אני יודע שבד"כ עושים עם |
const p = '058-46453434,054-848645489,052658845855.052372568166,054-840056985,0536.26569252,052-457157793,0' console.log(p.replace(/4|3/gi, ''));
אבל כאשר מדובר על ריווח נקודה לוכסן וכד' הוא חושב שזה הקוד ולא עובד. נתקעים כי זה נראה כמו תו של הקוד, אז אני משחק עם גרשיים וגריש אחד.
תכלס לא הלך.
אשמח לעזרה. -
@אבי-203
היה טוב אם היית כולל את מה שלא הצלחת כדי שאבין במה שגית. אני מנחש שהבעיה הייתה הנקודה שנחשבת תו מיוחד שמשמעותו "הכל", וגם הלוכסן יכול לעשות בעיה כפולה כי יש לו גם משמעות כתו רג'קס וגם כסוגר ביטוי רגקס בJS.
בשביל זה צריך לעשות escap ע"י ששמים לפניהם לוכסן הפוך (הישר זה הלוכסן של החילוק שנמצא באיזור המספרים במקלדת).
ככה:console.log(p.replace(/\.|\/|\\/gi, ''));
כדאי לציין שבמקרה שלך לא צריך דוקא את "או", אפשר להשתמש בקבוצת תווים (זה סוגריים מרובעות שאפשר פשוט לציין שמה את כל סוגי התוים שרוצים). למשל, להחליף רווח נקודה ולוכסן אז אפשר ככה:
console.log(p.replace(/[\.\/\\]/gi, ''));
שים לב שבשימוש בסוגריים מרובעות אתה מציין את התווים ברציפות ללא | ביניהם, תמיד זה "או" ברמת תו בודד.
אפשר לעשות גם טווח תווים וגם שלילה.
לכן אם אתה מחפש כל מה שלא ספרה, אתה יכול להשתמש בשילוב בין השניים:console.log(p.replace(/[^0-9]/gi, ''));
ה^ הופך את הסוגריים לשלילה, כלומר אתה מחפש תו מכל סוג למעט מה שמצויין בקבוצה. בקבוצה כתבנו 0-9 שזה כלל התוים בASCII בין 0-9 שזה כל הספרות.
למעשה יש קיצורים לכאלה ביטויים, למשל \d שקול ל[0-9] ואילו \D שקול ל [^0-9] כך שתוכל לכתוב ככה:console.log(p.replace(/\D/gi, ''));
וזה ימחוק כל מה שלא ספרה. הבעיה שאתה הפסיקים כנראה אתה רוצה להשאיר, לכן צריך לכלול כן קבוצה:
console.log(p.replace(/[^,\d]/gi, ''));
-
-
אני בדיוק רואה איזה סרטון שהביאו כאן על האקדמיה. ואני אומר לעצמי כאן זו האקדמיה האמיתית. לפעמים לומדים באקדמיה הרבה תיאוריות שלא נוגעות בפרקטיקה, בפרט בתכנות מה שהיה היום לא יהיה מחר, אולי הגיע הזמן לאקדמיה חרדית. אנשים יצאו עם תעודה מקצועית על ידע. אם יפגינו יכולות כל מעסיק רוצה מישהו טוב פחות את התעודה, בהמשך עוד יכירו בזה ממשלתית ובהתאמת שכר.
-
@dovid ואוו נדמה לי כ תורה על רגל אחת. מושלם!
האמת בתחילה ביצעתי את זה עם פונקציית map על אובייקט פריטים שהבאתי, ואח"כ הוספתי את הפסיק וחיברתי למחרוזת אחת.
עכשיו אני חושב אולי כדאי לעשות את זה בנפרד, כלומר לתת למשתמש גם אפשרות להדביק רשימת מספרים שלו, אני מניח הם יגיעו כבר עם פסיקים, ואז לרוץ על הכל. רק שאז יהיה קשה לתקן אם אין אפס בתחילה הוסף אפס בתחילה, למקרה שהעתיק מאקסל, אולי חיפוש אחר החלף 5, ב- 05,במחשבה שנייה אני שם לב שאז לא אוכל להריץ את יתר החישובים להסיר כשרים ומספרים ביתיים. אני בכל מקרה חייב למצא דרך לעבור מספר מספר ממחרוזת לפי הפסיק. ורק אח"כ לבנות את המחרוזת מחדש.
יש דרך כזו לעבור על מחרוזת ועבור מספר מספר לפי הפסיקים כמו map? -
@אבי-203 זה קל להוסיך אפס בהתחלה, כותבים ככה:
"44".replace(/^([^0])/, '0$1')
(מתכנת מצוי עלול לעשות הסרה של אפס בקלט, והוספה גורפת לכולם בסוף כמו הבדיחה עם הקומקום).
אני משער שזה לא נוגע לך, אבל אני לא מתאפק מלהוסיף https://tchumim.com/topic/915, השפה שונה אבל הביטוי זהה..). -
@אבי-203 אמר בעריכת מחרוזת עם מספרי פלאפון:
במחשבה שנייה אני שם לב שאז לא אוכל להריץ את יתר החישובים להסיר כשרים ומספרים ביתיים. אני בכל מקרה חייב למצא דרך לעבור מספר מספר ממחרוזת לפי הפסיק. ורק אח"כ לבנות את המחרוזת מחדש.
יש דרך כזו לעבור על מחרוזת ועבור מספר מספר לפי הפסיקים כמו map?var userInput = '' //יכול להיות מופרד בפסיק או בקפיצת שורה. userInput.split(/[\n,\t]/) .map(x => x.replace('\D', '').replace(/^([^0])/, '0$1')) //הסרת תווים זרים והוספת אפס .map( ... ); //בדיקה אם כשר...
-
@אבי-203 אמר בעריכת מחרוזת עם מספרי פלאפון:
איפה אני יכול ללמוד על כל תורת הביטויים האלו??
@chv אמר בעריכת מחרוזת עם מספרי פלאפון:
ל @dovid יש כאן מדריך מושקע
https://tchumim.com/post/10185כיהודה ועוד לקרא אני אישית נהנתי מ https://regexone.com/ יש שם תרגול חי צעד אחר צעד.
-
שיפור:
var koshers = [ "05041", //פלאפון "05276","05271", //סלקום "05484","05485", //פרטנר "05731", "05741", //מירס "05331", //הוט "05831","05832","05337","05338", //גולן "05567" //רמי לוי ]; var userInput = ''; //יכול להיות מופרד בפסיק | קפיצת שורה | טאב var result = userInput.split(/[\n,\t]/) .map(x => x.replace('\D', '').replace(/^([^0])/, '0$1')) //הסרת תווים זרים והוספת אפס .map(function(tel){ if(!/0[57]\d{8}|0[23489]\d{7}/.test(tel)) return {valid: false, number: tel}; var portable = tel.startsWith('05'); var kosher = portable && koshers.includes(tel.substring(0,4)); return { number: tel, valid: true, isPortable: portable, isKosher: kosher, smsCapable: portable && !kosher }; });