簡體   English   中英

PHP preg_match-此RegEx有什么問題?

[英]PHP preg_match - what's wrong with this RegEx?

值將采用123-123-123-12345的格式,我希望使用preg_match。 您看到此regEx有什么問題嗎?

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

也嘗試過

/^\d{3}\-\d{3}\-\d{3}\-\d{5}+$/

            //With and without the + before the $

他們都因Boo Hoo而失敗;(

編輯:

var_dump($elem)

array(3) { [0]=>  string(1) "c" [1]=>  string(0) "" [2]=>  string(36) "123-123-123-12345" }

試試這個代碼:

$value = '123-123-123-12345';

if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
    echo "Yeah match Elm: ".$value."<br />"; 
} else {
    echo "Boo Hoo Elm: '".$value."'<br />";  
}

(不確定\\是否有用-但在這種情況下,它們似乎不會造成任何麻煩)

我得到:

Yeah match Elm: 123-123-123-12345

並與此:

$value = '123-123-1a-123';

我得到:

Boo Hoo Elm: '123-123-1a-123'

正則表達式實際上似乎對我有用嗎?


您能否提供更多代碼? 或者也許使用:

var_dump($elem);

可能有用,檢查它是否確實包含您所期望的?

您能否提供一些測試數組的數據(最好是序列化的),因為我無法重現此行為。

$elem = array ('123-123-123-12345');

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

結果:是的,匹配榆木:123-123-123-12345

同樣,在正則表達式中不需要反斜杠。 如果破折號不是第一個字符,則只需要在[]組中進行轉義([-az]會匹配“-OR az”,但是[az]會匹配“ a或\\或z”)。

-編輯-

好的,我唯一不了解的是您使用的是哪種編碼?

string(36) "123-123-123-12345"

36個字節...最接近的是UTF-16,但只有34個字節。 那么,您使用的編碼是什么?

您還可以嘗試在與regexp匹配之前將字符串轉換為utf-8。 (在轉換為utf-8后,也請嘗試在正則表達式中使用'u'參數:'/ somreg \\ d / u')

使用雙反斜杠。 \\

Ummmmmm ....

在您的編輯中,您談論的是$ array,而在您的循環中談論的是$ elem

這可能是問題嗎?

編輯:順便說一下,您的數據有些奇怪,我只計算17個字符,所以為什么要給出一個字符串(36)?

無法復制。 當我將其粘貼到文件中時,您的代碼可以正常工作。

但是,由於var_dump()顯示的目標字符串為15個字符的字符串,目標字符串為35個字節,因此似乎確實存在編碼問題。 如果對utf8_decode($value)而不是$value運行正則表達式會怎樣?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM