העבודה שגרמה לי לבנות את זה הגיעה כשרשרת דואל שהועברה בעומק ארבעים הודעות לקוח רצה רשימה אחת של כל מי שהועתק בשרשור של שישה חודשים כדי שיוכלו להעביר את הקבוצה לרשימת תפוצה מתאימה כל כתובת הייתה שם, קבורה ב To: ו Cc: שורות, בחתימות, בתשובות מצוטטות, לפעמים שלוש פעמים מעל גלילה והעתקה ביד עמדה לקחת אחר צהריים ועדיין הייתי מפספס כמה ומשכפל עוד כמה מה שבעצם הייתי צריך זה משהו שיקרא את כל כתם הטקסט, ימצא בו כל כתובת אימייל, יזרוק את הכפילויות, וימסור לי רשימה נקייה זה ה חולץ דואל, והמדריך הזה מסביר איך זה עובד ולמה הפרטים המשעממים של ההתאמה חשובים.
TL;DR: מחלץ דואר אלקטרוני סורק גוש טקסט ושולף כל כתובת דואר אלקטרוני שהוא מכיל, מחזיר רשימה לא משוכפלת שאתה יכול להעתיק הכלי Toolz הולך רחוק יותר, מחלץ כתובות URL, מספרי טלפון וכתובות IPv4 מאותו טקסט עם אותו מנוע הוא תואם לביטויים רגולריים שנאספו, ממוטט כפילויות ללא רגישות רישיות ויכול למיין ולהוריד את הפלט הכל פועל בצד הלקוח: אין העלאה, אין הרשמה, עובד במצב לא מקוון.
אני בונה מוצרי SaaS על Laravel ו-React ואני שולח תוספים של וורדפרס, וכמות מפתיעה מהעבודה הזו היא הפיכת טקסט לא מובנה לרשימות מובנות ייצוא של תיבת דואר נכנס לתמיכה, דף מגורד, קובץ יומן, מסמך מודבק: כולם מערבבים את הנתונים שאתה רוצה עם רעש סביבו משיכת הכתובות, הקישורים או כתובות ה-IP מתוך הרעש הזה היא משימה קטנה שאתה עושה כל הזמן, ועושה זאת עם ביטוי רגולרי שאתה חצי זוכר ומקליד מחדש בכל פעם זה בדיוק החיכוך שכלי דפדפן צריך להסיר אז זה המדריך הלוואי שהיה לי אחר הצהריים ששרשרת ארבעים הודעות נחתה בחיקי.
מהו חולץ דואל?
מחלץ דואר אלקטרוני הוא כלי שקורא טקסט חופשי ומחזיר כל כתובת דואר אלקטרוני בתוכו כרשימה. אתה מדביק גוש טקסט, בין אם זה שרשור דואר אלקטרוני, דף אינטרנט, dump CSV, יומן צ'אט או דף קוד מקור, והכלי מוצא כל כתובת באמצעות תבנית המזהה את צורתו של דואר אלקטרוני: חלק מקומי, סימן at ודומיין המסתיים בדומיין חוקי ברמה העליונה. במקום לקרוא את הטקסט בעצמך ולהעתיק כתובות אחת אחת, אתה מקבל את כל הסט בבת אחת, עם כפילויות שהוסרו.
הכליז חולץ דואל הוא בכוונה יותר מאשר מיילים אותו מנוע סריקה יכול לחלץ כתובות URL של http ו-https, מספרי טלפון וכתובות IPv4, מכיוון שהם אותה סוג של בעיה: למצוא כל התרחשות של דפוס ידוע בקיר של טקסט ולפרט אותו בצורה נקייה זה הופך אותו לכלי חילוץ כללי ולא לכלי טריק יחיד רעיון הליבה קבוע על פני כל ארבעת הסוגים הגדירו דפוס מדויק לאיך נראית התאמה חוקית, סרקו את הטקסט עבור כל התרחשות שאינה חופפת, ואז נקו, בטל שכפול, ובאופן אופציונלי מיין את התוצאות לרשימה שתוכל להדביק בכל מקום שתזדקק לה.
למה לא פשוט לגלגל את העין או להשתמש ב-find-in-page?
כי שתי השיטות נכשלות בדרכים החשובות ביותר קריאת טקסט והעתקת כתובות ביד היא איטית, וגרוע מכך, היא לא אמינה: אתה מתגעגע לכתובת תחובה בתוך בלוק חתימה, אתה מעתיק את אותו אחד פעמיים מתשובה מצוטטת, ואין לך דרך לדעת כמה היית צריך בסופו של דבר עם הקלט גדול יותר, הסיכויים גרועים יותר, ואת התשומות שצריך לחלץ הם בדרך כלל הגדולים.
דפדפן למצוא-בעמוד לא יותר טוב בשביל זה זה מדגיש התאמות למחרוזת שאתה כבר יודע, אבל כל העניין של החילוץ הוא שאתה לא יודע את הכתובות מראש, אז אין מה לחפש מה שאתה צריך זה דפוס שמתאים לצורה של מייל ללא קשר לאותיות המדויקות שלו, וזה בדיוק מה שביטוי רגולרי מספק כתיבת הביטוי הזה בצורה נכונה היא המיומנות הקטנה של עצמו, ולקבל את זה מעט לא נכון פירושו או חסר כתובות חוקיות או לתפוס זבל שנראה רק כמו אחד מחלץ ייעודי אופה תבנית בדוקה כך שלעולם לא תצטרך להקליד אותה מחדש, ומשלב אותה עם ביטול שכפול כך שהרשימה שאתה מעתיק היא הרשימה שאתה יכול לסמוך עליה אם אתה רוצה להבין או להתאים את התבנית עצמה, ה בודק regex מאפשר לך להדביק ביטוי משלך ולראות אותו תואם לטקסט לדוגמה בזמן אמת.
עד כמה מדויק התאמת הדואל?
זו השאלה שמחליטה אם מחלץ הוא שימושי או מעצבן, ולכן כדאי לדייק פורמט כתובת הדואל מוגדר על ידי RFC 5322, והדקדוק המלא הוא בארוק מפורסם. זה מאפשר לצטט חלקים מקומיים עם רווחים, הערות בסוגריים וצורות אחרות שתקפות מבחינה טכנית ולעולם לא מופיעות פעם אחת בנתונים אמיתיים. ביטוי רגולרי שמנסה להתאים לכל ה-RFC הוא עצום, ובפועל הוא גורם יותר נזק מתועלת, כי הוא מתחיל להתאים מחרוזות שאף שרת דואר לא יקבל לעולם.
מחלץ Toolz משתמש בתת-הקבוצה הפרגמטית שהתעשייה הסתפקה בה: חלק מקומי של אותיות, ספרות וסימני הפיסוק הנפוצים, סימן at ותחום מנוקד שמסתיים בתחום ברמה העליונה של לפחות שתי אותיות. זוהי אותה צורה שרוב ספריות האימות משתמשות בה, והיא תואמת את הכתובות שיש לאנשים בפועל בזמן דחיית הרעש. זהו סחר מכוון. אתה מוותר על התאמת הצורות האקזוטיות שאינן מתרחשות כדי למנוע תוצאות חיוביות כוזבות בטפסים שנראים כמו מיילים אבל לא. לשליפת כתובות ממסמכים אמיתיים, שזה כל העבודה, המסחר הזה הוא הנכון. הכלי כנה גם לגבי זה: אותו נימוק חל על מספרי טלפון, שבהם אין פורמט גלובלי אחד, כך שהדפוס רחב בכוונה ותופס מדי פעם מספר ארוך שאינו מספר טלפון, וזו הסיבה שבדיקת תוצאות הטלפון שווה רגע.
איך אני מחלץ מיילים מטקסט עם הכלי?
הזרימה אורכת כעשר שניות הדבק את הטקסט שלך בתיבת הקלט, או לחץ על טען מדגם כדי לראות דוגמה עובדת המכילה מיילים, כתובות URL, מספרי טלפון וכתובות IP, כולם מעורבבים יחד.
בחר מה לחלץ באמצעות שורת הכפתורים בחלק העליון: כתובות דואל, כתובות URL, מספרי טלפון, כתובות IPv4 או מספרים הכלי מחיל את תבנית ההתאמה עבור סוג זה ומתעלם מכל השאר לאחר מכן הגדר את אפשרויות הרשימה השאר "Remove duplicates" on כדי למוטט התאמות חוזרות לערך בודד, שזה כמעט תמיד מה שאתה רוצה הפעל "Sort" כדי להזמין את הרשימה בסדר אלפביתי, או לפי ערך כאשר אתה מחלץ מספרים. הפעל "Lowercase" כדי לנרמל מיילים וכתובות URL כך [email protected] ו [email protected] מתייחסים לכתובת אחת בחר כיצד התוצאות מצטרפות: שורה חדשה לרשימה אנכית, פסיק לתא CSV או א To: שדה, רווח או נקודה-פסיק עבור לקוחות הדואר שמצפים לכך.
לחץ על חלץ והתוצאות מופיעות עם ספירה של כמה התאמות נמצאו וכמה כפילויות הוסרו העתק את הרשימה והדבק אותה בכל מקום שהיא צריכה ללכת זה כל הלולאה, ובגלל שהיא פועלת באופן מיידי אתה יכול להעיף בין סוגי חילוץ על אותו טקסט כדי למשוך מיילים, לאחר מכן כתובות URL, ואז כתובות IP, מבלי להדביק מחדש שום דבר.
מה אני יכול לחלץ, ומתי הייתי משתמש בכל אחד?
ארבעת סוגי החילוץ מכסים את הנתונים שמסתתרים לרוב בתוך טקסט. הנה מה שכל אחד מתאים והמצב שהוא מיועד לו.
| סוג | התאמות | שימוש אופייני |
|---|---|---|
| כתובות דואל | [email protected] בתת-קבוצת ה-RFC המעשית |
בניית רשימת תפוצה משרשור, משיכת אנשי קשר מיצוא |
| כתובות אתרים | http:// ו https:// קישורים, סימני פיסוק נגררים גזוז |
איסוף כל קישור מדף או מסמך לצורך ביקורת |
| מספרי טלפון | ריצות של 7+ ספרות עם רווחים, מקפים, נקודות או סוגריים | איסוף מספרי אנשי קשר מטקסט מגורד או מודבק |
| כתובות IPv4 | רביעיות מנוקדות כאשר כל אוקטט מוגבל ל-0-255 | משיכת כתובות מתוך קובץ יומן או dump config |
| מספרים | מספרים שלמים ועשרוניים חתומים, עם אלפי מפרידים | חילוץ דמויות מדוח או טבלה שהודבקו כטקסט |
סוגי הדואר האלקטרוני וכתובות ה-URL הם אלה שאני מגיע אליהם ביותר, בדרך כלל ביחד: חלץ את המיילים כדי לבנות רשימת אנשי קשר, ואז עבור לכתובות URL כדי לבקר כל קישור את אותן הפניות למסמכים. סוג IPv4 מרוויח את מקומו כשאני קורא יומני שרת ורוצה את קבוצת הכתובות הייחודית שפוגעת בנקודת קצה, שמתחבר באופן טבעי עם מנתח URL כאשר אז אני צריך לפרק את הבקשות האלה עוד יותר. סוג המספר הוא המוזר אך שימושי באמת להרמת דמויות מדוח שהודבק כטקסט רגיל במקום גיליון אלקטרוני. לא משנה מה תבחר, אפשרויות ביטול השכפול והמיון פועלות באותו אופן, כך שהפלט הוא תמיד רשימה נקייה ומסודרת ולא התאמות גולמיות.
איך בעצם פועל כאן דה-כפילות?
ביטול שכפול נשמע טריוויאלי עד שאתה שוקל מעטפת. אותו אדם 's כתובת יכולה להופיע כ [email protected] בחתימה אחת ו [email protected] בתשובה מצוטטת, ושכפול נאיבי שמשווה מחרוזות בדיוק ישמור על שניהם. זה שגוי: חלקים מקומיים של דואר אלקטרוני אינם רגישים לאותיות רישיות בכל מערכת דואר מעשית, ודומיינים אינם רגישים לאותיות רישיות בהגדרה. אז המחלץ משווה מיילים וכתובות URL ללא רגישות לאותיות רישיות כאשר מחליט אם שתי התאמות זהות, מה שאומר ששני האיותים הללו קורסים לערך אחד גם אם לא הפעלת את האפשרות באותיות קטנות.
הכלי גם אומר לך מה הוא עשה הספירה מעל התוצאות מראה גם כמה התאמות הוא מצא בסך הכל וגם כמה כפילויות הוא הסיר, כך שאתה אף פעם לא מנחש אם הרשימה התכווצה בגלל ביטול כפילות או בגלל שהקלט היה קטן יותר ממה שחשבת עבור מספרים וכתובות IP, כאשר המעטפת אינה רלוונטית, ההשוואה מדויקת זה סוג הפרטים שאינם נראים כאשר זה עובד ומקומם כאשר זה לא עובד, ולכן כדאי לעשות נכון מאשר לעזוב למישור Set של מחרוזות גולמיות אם העבודה שלך היא באמת על אילו ערכים מופיעים ברשימה אחת אבל לא אחרת במקום לשלוף אותם מהפרוזה, ה השווה כלי שתי רשימות האם מגדיר חשבון בעמודות והוא מתאים יותר לשאלה הספציפית הזו.
האם זה בטוח לחלץ מטקסט רגיש באינטרנט?
עבור כלי זה, כן, והסיבה היא איך הוא בנוי ולא מדיניות אתה צריך לקחת על אמונה הטקסט שאתה מדביק נסרק כולו בדפדפן משלך עם JavaScript אין העלאה, אין שרת הלוך ושוב, ושום דבר לא נרשם או מאוחסן אתה יכול לאשר את זה על ידי פתיחת הדפדפן שלך's לשונית רשת ולחיצה על חלץ: אין בקשה עוזבת את הדף לאחר טעינת הדף תוכל לעבור למצב לא מקוון והוא ממשיך לעבוד.
זה חשוב יותר לחילוץ מאשר כמעט לכל סוג אחר של כלי, כי הטקסט שאתה מדביק מלא לעתים קרובות בדיוק בנתונים שלא תרצה להדליף שרשורי דואר אלקטרוני מכילים כתובות פרטיות, קבצי יומן מכילים כתובות IP פנימיות ושמות מארח, ומסמכים מודבקים מכילים מספרי טלפון ושמות מחלץ שמעלה את הטקסט הזה לשרת כדי לעבד אותו, ככל שיהיה כוונה טובה, הופך את ההתכתבות הפרטית שלך למישהו אחר 's יומן שרת עיבוד בצד הלקוח מסיר את הסיכון בשורש: הטקסט לעולם לא עוזב את המחשב שלך ברירת המחדל היא מכוונת בכל כלי ב-Toolz.dev, והנחתי את הטיעון המלא ב- מדריך פרטיות נתונים לכלים מקוונים אם אתה רוצה את ההיגיון לעומק למבט רחב יותר על איך כלי השירות הקטנים האלה משתלבים יחד בערכה עובדת, שלי מדריך כלי פרודוקטיביות למפתחים עובר בין החלקים.
מהם הגבולות שכדאי לדעת?
להיות ישר לגבי גבולות זה חלק מאמון בכלי, אז הנה הקצוות הכנים דפוס האימייל תואם את תת-הקבוצה המעשית של RFC 5322, לא את הדקדוק המלא, אז כתובת תקפה מבחינה טכנית אך אקזוטית עם חלק מקומי מצוטט או הערה תחסר. זו בחירה מכוונת להימנע מתוצאות חיוביות שגויות, והיא בעצם לא משפיעה על כתובת אמיתית, אבל זו מגבלה וכדאי לדעת שהיא קיימת. מספרי טלפון הם הרופפים מבין חמשת הסוגים, כי אין פורמט אוניברסלי; הדפוס מחפש ריצה של שבע ספרות או יותר עם מפרידים נפוצים, מה שאומר שהוא יכול לתפוס מדי פעם מזהה ארוך שאינו מספר טלפון, כך שהצצה בתוצאות הטלפון שווה את השנייה שצריך.
המחלץ עובד גם על טקסט, לא על קבצים בינאריים אם יש לך מסמך PDF או Word, העתק את הטקסט שלו והדבק את זה; הכלי לא יכול לקרוא את פורמט הקובץ עצמו. ומכיוון שהכל פועל בזיכרון הדפדפן, קלט עצום באמת יוגבל על ידי הדפדפן שלך ולא על ידי הכלי, אם כי עבור המיילים, הקישורים וה-IP אנשים למעשה מחלצים את התקרה הזו הרבה מעל מה שתפגע. אף אחת מהגבולות הללו לא נוגסת בשימוש רגיל. לדעת אותם זה רק ההבדל בין שימוש בכלי בביטחון לבין להיות מופתע ממקרה קצה.
שאלות נפוצות
כיצד אוכל לחלץ כתובות דואל מטקסט? הדבק את הטקסט לתוך חולץ דואל ולהשאיר את הסוג מוגדר לכתובות דואר אלקטרוני זה סורק את הטקסט עם דפוס דואר אלקטרוני, מפרט כל כתובת שהוא מוצא, מסיר כפילויות, ומאפשר לך להעתיק את הרשימה הנקייה אין צורך בהרשמה או העלאה, וזה עובד במצב לא מקוון לאחר הטעינה.
האם זה יכול לחלץ גם כתובות אתרים ומספרי טלפון? כן. החלף את סוג החילוץ לכתובות URL, מספרי טלפון, כתובות IPv4 או מספרים. אותו מנוע מחיל דפוס שונה עבור כל סוג, כך שכלי אחד מטפל במספר עבודות חילוץ מאותו בלוק טקסט מבלי להדביק אותו מחדש.
האם הוא מסיר מיילים כפולים? כן, כאשר האפשרות הסר-כפולים פועלת התאמות חוזרות קורסות לערך בודד, והכלי מדווח כמה כפילויות הוסרו הודעות דואל וכתובות URL מותאמות ללא רגישות רישיות, כך שאותה כתובת במארז אותיות שונות מטופלת כאחת.
עד כמה מדויק התאמת הדואל? התבנית תואמת את תת-הקבוצה המעשית של כתובות דואל הנראות בנתונים אמיתיים: חלק מקומי, סימן at ודומיין מנוקד המסתיים בדומיין חוקי ברמה העליונה. הוא אינו מיישם את הדקדוק המלא של RFC 5322, המאפשר צורות אקזוטיות שלעולם לא מופיעות בפועל וייצרו התאמות שווא על מחרוזות שנראות רק כמו מיילים.
מדוע מספרי טלפון מסוימים מותאמים באופן מוזר? למספרי טלפון אין פורמט גלובלי יחיד, ולכן התבנית מחפשת ריצה של שבע ספרות או יותר עם רווחים, מקפים, נקודות או סוגריים ביניהן. זה רחב בכוונה, מה שאומר שהוא יכול לתפוס מדי פעם מספר ארוך שאינו מספר טלפון, ולכן כדאי לסקור את התוצאות בעת חילוץ מספרי טלפון מטקסט מעורב.
האם אני יכול למיין את הרשימה שחולצה? כן. הפעל את אפשרות המיון כדי להזמין את הרשימה בסדר אלפביתי, או לפי ערך מספרי בעת חילוץ מספרים. שלב אותו עם אפשרות הסר-כפולים כדי לקבל רשימה נקייה, מסודרת, ללא כפילויות מוכנה להעתקה.
באילו פורמטים אני יכול להעתיק את התוצאות? באפשרותך להצטרף להתאמות עם שורה חדשה, פסיק, רווח או נקודה-פסיק בחר שורה חדשה עבור רשימה אנכית, פסיק עבור תא CSV או שדה To, ונקודה-פסיק עבור לקוחות דואר מסוימים הספירה מעל הפלט מראה כמה התאמות חולצו.
האם הנתונים שחולצו מועלים לכל מקום? מס 'הטקסט נסרק באופן מקומי בדפדפן שלך עם JavaScript שום דבר לא מועבר, נרשם או מאוחסן, והכלי ממשיך לעבוד במצב לא מקוון לאחר הטעינה, מה שאתה יכול לאשר על ידי צפייה בכרטיסייה הרשת בזמן שאתה לחלץ.



