הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה| עם הפונקציה preg_match (https://hosts.co.il/forums/showthread.php?t=70178)

ofekbaba 11-12-08 14:14

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

תודה, אופק.

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

preg_match('/.*@?.*\.?.*/', $_REQUEST["mail"])

Elad-A 11-12-08 17:27

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

בהצלחה.

ofekbaba 11-12-08 19:18

תודה אחי קראתי זה עזר לי
עדיין אני משתגע למה זה לא נכון:
ציטוט:

preg_match('/(\w+)@(\w+)\.(\w+)/i', 'abc@domain.com')

vadimg88 11-12-08 20:04

אם אתה מנסה להתאים כתובת מייל ולבדוק אם היא אכן תואמת לכתובת מייל נכונה אני הייתי עושה את זה ככה:

PHP קוד:

<?php

$email 
"myname@mydomain.com";
$regex "/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,4})(\]?)$/";

if ( 
preg_match$regex$email) )
{
    echo 
"Regex matched";
    exit;
}

echo 
"Regex did not match!";


?>


SDF 11-12-08 23:01

בשביל מה הסוגריים המרובעים והמספרים בסיומת?
למשל עבור:

PHP קוד:

$email "myname@[a.1]"

הביטוי שלך יחזיר:

קוד:

Regex matched
ובכל מקרה, ביטויים רגולריים עבור איימיילים לדעתי לעולם לא יהיו מושלמים.
אבל זה מה יש.

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

משהו כזה:
PHP קוד:

<?php
error_reporting
E_ALL );

$emails = Array();

$emails[] = "SDF@freebsd.co.il"// looks ok, right? but no MX, should fail the check.
$emails[] = "SDF@nix.co.il"// looks ok and passes the check.
$emails[]  = "user@hosts.co.il"// ok
$emails[]  = "user@gmail.com@walla.co.il"// fail
$emails[]  = "user@someunkown"// fail

foreach ( $emails as $email )
{
        
$data explode("@"$email);
        
$ct count($data);
        if ( 
$ct || $ct <= )
        {
                
printf(">> FAIL: Email %s failed the check.\n"$email);
                continue;
        }

        
$hostname $data[1];

        if ( 
getmxrr  $hostname$mxhosts$weight ) )
        {
                if ( !
count$mxhosts ) )
                {
                        
printf(">> FAIL: NO MX for email %s\n"$email);
                }
                else
                {
                        
printf(">> OK: Email %s were OK.\n"$email);
                }
        }
        else
        {
                
printf(">> FAIL: DNS failed for email %s\n"$email);
        }
}


exciter 12-12-08 01:36

SDF, אתה מודע לזה שיכולה להיות כתובת מייל עם 3 נקודות נכון ? זאת אומרת בסגנון הזה: or@tza.bar.com
מעשית אף אחד לא עושה וכמעט לא רואים את זה, אבל אין הגבלה טכנולוגית על זה.
פה הקטע קוד שלך נפל על מייל תקין.

SDF 12-12-08 01:53

ציטוט:

נכתב במקור על ידי exciter (פרסם 686650)
SDF, אתה מודע לזה שיכולה להיות כתובת מייל עם 3 נקודות נכון ? זאת אומרת בסגנון הזה: or@tza.bar.com
מעשית אף אחד לא עושה וכמעט לא רואים את זה, אבל אין הגבלה טכנולוגית על זה.
פה הקטע קוד שלך נפל על מייל תקין.

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

בוא ננסה
user@this.is.just.a.test.freebsd.co.il

ofekbaba 13-12-08 14:18

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


כל הזמנים הם GMT +2. הזמן כעת הוא 08:23.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ