2011-07-24 20 views
1
return preg_match('/^([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*){1,64}$/iu', $str); 

當嘗試上面的代碼時,該函數將返回true到大於64的字符串。 這裏有什麼問題?php限制正則表達式與括號匹配不起作用

+0

您使用*內的(),這意味着該字符串可以比64更大的.. {1,64}量詞指整個表達在圓括號中,其不具有爲1個字符。這個正則表達式試圖找到什麼? – yoavmatchulsky

+0

在希伯來文中至少包含一個字符的字符串,之前的數字和最少一個字符之後的數字。基本上混合希伯來語和數字 – Tom

+0

檢查strlen($ str)<64後,爲什麼不用preg_match檢查數字/希伯來語? (或者可能是mb_strlen) – yoavmatchulsky

回答

0

我不知道是什麼毛病你的表情(我可以​​用ASCII字符複製它),但是這是工作

/^(?=.{1,64}$)([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*)$/ 

刪除在端部的長度的檢查。

在開始處添加(?=.{1,64}$)。這是一個積極的展望,只是檢查整個字符串是否在1到64個字符之間。如果是,則檢查模式,如果沒有結果是False

See here on Regexr

0
preg_match('/^([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*){1,64}$/iu', $str, $matches); 
return $matches; 

它只返回字符串是否被發現,你必須填寫的第三個參數($matches),並將其返回。

+0

那不是OP要求的。 – stema

+0

@stema:不,他不會。你會看到他的迴應 – genesis