0

这些值将采用这种格式 123-123-123-12345,我希望 preg_match 可以使用它。你能看出这个正则表达式有什么问题吗?

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" }
4

5 回答 5

1

尝试此代码:

$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);

可能有用,检查它是否真的包含您所期望的?

于 2009-09-25T19:28:52.147 回答
1

您能否提供一些带有数据的测试数组(最好是序列化),因为我无法重现这种行为。

$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 or \ or z”),则仅需要在 [] 组中转义破折号。

- - 编辑 - -

好的,所以我唯一无法理解的是您使用的是什么编码?

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

36 字节...我得到的最接近的是 UTF-16,但只有 34 字节。那么您使用的编码是什么?

您还可以尝试在匹配正则表达式之前将字符串转换为 utf-8。(也尝试在正则表达式中使用 'u' 参数:'/somreg\d/u',转换为 utf-8 后)

于 2009-09-25T19:32:37.767 回答
0

使用双反斜杠。\

于 2009-09-25T19:26:06.770 回答
0

嗯嗯……

在您的编辑中,您正在谈论$array并在您的循环中谈论$elem

这可能是问题吗?

编辑:顺便说一句,您的数据有些奇怪,我只计算了 17 个字符,那么为什么要给出一个字符串(36)?

于 2009-09-25T20:02:08.773 回答
0

无法复制。当我将其粘贴到文件中时,您的代码工作正常。

由于您var_dump()显示您的目标字符串是 15 个字符的字符串的 35 个字节,但是,看起来您确实存在编码问题。如果您针对utf8_decode($value)而不是运行正则表达式会发生什么$value

于 2009-09-25T20:09:20.787 回答