REGEX על שדה טלפון עברי בישראל

24sharon

New member
REGEX על שדה טלפון עברי בישראל

var phone2 = /^(([0-9]{1})*[- .(]*([0-9a-zA-Z]{3})*[- .)]*[0-9a-zA-Z]{3}[- .]*[0-9a-zA-Z]{4})+$/;


זה מה שקיים לי
אך הדרישה היא כזו

ע"מ לעשות ולדיזציה של מספרי טלפון בטפסים, מספר הטלפון צריך להכיל מקסימום עד 10 ספרות עם ואו בלי מקף.
זה אומר שניתן לרשום למספרים סלולרים 054-5660000 או 0545660000
לטלפונים נייחים 073,077,078,072 ( עד 8 ספרות)
ולטלפונים עם קידומת 03-04-08-02-09 עד 7 ספרות)

יש כאן משהו מן המוכן?

תודה
 

24sharon

New member
הבעיה היא באפשרות להוסיף קו מפריד או רווח

בתוך המספר

האם אפשר שייקח את ה\d בכללי ושיתעלם מהתו - (או לחילופין מרווחים)

שגם 11-22-333 יעבור
וגם 112-3333 יעבור
וגם 11-223-33 יעבור

תודה
 
יש לך רשימה של קידומות אפשריות?

אם לא, אפשר להסתפק במשהו הרבה יותר פשוט:

^((0\d{2}\-?)(\d\-?){7})|((0\d\-?)(\d\-?){8})$

אם כן, תצטרכי לשחק עם זה קצת...
 

Royi Namir

New member
שאלה

את רוצה 10 ספרות כאשר יש 0 או יותר מקפים בין המספרים ?

האם זה ה REGEX שאת מחפשת ?
 

24sharon

New member
בעיקרון כן

אבל לא רק גם שיתחיל ב0

ואם זה טלפון קווי של 02, 03 וכד' שיהא 9 ספרות

והבעיה העיקרית היא אופן הכתיבה
יש שיכתבו כך
052-1111111
052-11-11-111
052-1111-111
מה שעשיתי קצת דרך האוזן השמאלית אבל עובד
str = str.replace(/-/g, "");
str = str.replace(/ /g, "");
var phone2 = /^((\+972|972)|0)( |-)?([1-468-9]( |-)?\d{7}|(5|7)[0-9]( |-)?\d{7})$/;

פשוט הסרתי את המקפים, ואז הואלידציה בודקת את המספר ממש, לא תופס מקרה קצה של
050------------1111-------------111111
אבל לוכד את רוב המקרים

תודה
 

Miki Watts

New member
אני גם מסכים, אני לא רואה פה באמת צורך

ב regex.

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

Etnozam

New member
מסכים.

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

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

אם היה לי עסק הייתי מריץ שיחת טלפון אוטומטית (אם העסק קטן - לא אוטומטית) לווידוא קלט.
ממילא 99% מהשגיאות בקלט לא יתפסו ע"י ה"ווידוא" הזה.
 

Royi Namir

New member
הנה הפיתרון


Here is the regex

^(?:0(?!5)(?:2|3|4|8|9))(?:-?\d){7}$|^(0(?=5)(?:-?\d){9})$

a cell number is 05..... ( 10 digits)
a city number is 02,03,04,08,09 ( Did i miss something ?).... (9 digits)

all number allow : "-" in the middlt only. no dual allowed.

please test it.

http://regexr.com?35fnj



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

נ.ב. ההנחה שלי זה שניידים מתחילים ב 05... אם יש תצורות אחרות נא אמרי לי וארחיב.
 

Royi Namir

New member
הבהרה

07467-8-3827
074 הוא לא קידומת אבל הוא גם יעבור וולידיציה.
למה ?
כי אין 07 בערים.
באותה מידה שאין 05.
כלומר ה REGEX מחפש *05 , *07 ומשייך את זה לסלולאר ( במידה וכמות בתווים מתאימה)

וכן - 02,03,04,08,09 - למספרי ערים
אני חושב זה מספיק מקובל.
שרון אם את צריכה עוד - נא אמרי.
 

24sharon

New member
תודה רבה קבל צל"ש

זה רק מראה לי כבר כמה שכחתי את הREGEX

מה זה ה?: בפתיחת סוגריים?, ידעתי ושכחתי
יש גם !: אם זכור לי גם

כבר בודקת
 
למעלה