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

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   המרת REGEX מJS ל PHP (https://hosts.co.il/forums/showthread.php?t=101944)

GNS 09-01-13 16:13

המרת REGEX מJS ל PHP
 
יש לי קוד רגקס JS שלקוח מגוגל שבודק האם סטרינג מסויים אמור להיות מימין לשמאל או משמאל לימין:
קוד:

        var ltrChars            = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF'+'\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF',
            rtlChars            = '\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC',
            ltrDirCheckRe      = new RegExp('^[^'+rtlChars+']*['+ltrChars+']'),
            rtlDirCheckRe      = new RegExp('^[^'+ltrChars+']*['+rtlChars+']');


אני צריך לעשות אותו דבר אבל בPHP. ניסיתי להעתיק את הרגקס בדיוק כמו שהוא אבל זה לא עובד:

PHP קוד:

<?php
$rtlChars
="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC";
$ltrChars="A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF"."\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF";
$ltrRegex='^[^'.$rtlChars.']*['.$ltrChars.']';
$rtlRegex='^[^'.$ltrChars.']*['.$rtlChars.']';

if(
preg_match($rtlRegex"abc"))
{
    echo 
"rtl";
}
else if(
preg_match($ltrRegex"abc"))
{
    echo 
"ltr";
}
else
{
    echo 
"undefinded";
}

?>

תודה!

Haimz 09-01-13 17:54

אני לא בטוח, אבל תנסה:
PHP קוד:

<?php

$rtlChars
="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC"
$ltrChars="A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF"."\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF"
$ltrRegex='/^[^'.$rtlChars.']*['.$ltrChars.']/'
$rtlRegex='/^[^'.$ltrChars.']*['.$rtlChars.']/'

if(
preg_match($rtlRegex"abc")) 

    echo 
"rtl"

else if(
preg_match($ltrRegex"abc")) 

    echo 
"ltr"

else 

    echo 
"undefinded"

?>


GNS 09-01-13 18:52

ציטוט:

נכתב במקור על ידי Haimz (פרסם 867613)
אני לא בטוח, אבל תנסה:
PHP קוד:

<?php

$rtlChars
="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC"
$ltrChars="A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF"."\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF"
$ltrRegex='/^[^'.$rtlChars.']*['.$ltrChars.']/'
$rtlRegex='/^[^'.$ltrChars.']*['.$rtlChars.']/'

if(
preg_match($rtlRegex"abc")) 

    echo 
"rtl"

else if(
preg_match($ltrRegex"abc")) 

    echo 
"ltr"

else 

    echo 
"undefinded"

?>


=\ לא עובד..

איציק ברבי 10-01-13 12:24

שגיאה? או שלא עובד בכללי.

Haimz 10-01-13 12:43

אולי:
PHP קוד:

<?php
    
if( preg_match('/^[\x{0590}-\x{05ff}\x{0600}-\x{06ff}]/u'$string) )
    {
        echo 
"rtl";
    }
    else
    {
        echo 
"ltr";
    }
?>


GNS 10-01-13 12:52

ציטוט:

נכתב במקור על ידי Haimz (פרסם 867667)
אולי:
PHP קוד:

<?php
    
if( preg_match('/^[\x{0590}-\x{05ff}\x{0600}-\x{06ff}]/u'$string) )
    {
        echo 
"rtl";
    }
    else
    {
        echo 
"ltr";
    }
?>


גם לא..
תמיד מחזיר ltr

Haimz 10-01-13 18:22

את זה כתבתי ובדקתי..
PHP קוד:

<?php 
    $string 
"שלום";    

    if( 
preg_match('/^[א-ת]+/'$string) ) 
    { 
        echo 
"rtl"
    } 
    else 
    { 
        echo 
"ltr"
    } 
?>


GNS 10-01-13 20:59

ציטוט:

נכתב במקור על ידי Haimz (פרסם 867701)
את זה כתבתי ובדקתי..
PHP קוד:

<?php 
    $string 
"שלום";    

    if( 
preg_match('/^[א-ת]+/'$string) ) 
    { 
        echo 
"rtl"
    } 
    else 
    { 
        echo 
"ltr"
    } 
?>


אבל זה עובד רק בעברית.

אני צריך של כל השפות (יש עוד שפות שכותבים מימין לשמאל).
לכן אני דבק באלגוריתם של גוגל.


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

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