值将是在我想的preg_match为工作此格式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 />";  
   }
}

也曾尝试

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

            //With and without the + before the $

它们都失败,嘘呼;(

编辑:

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

而且不需要在正则表达式的反斜杠。破折号只需要在[]组进行转义,如果他们不是第一个字符([-a-Z]将匹配“ - 或A-Z”,而[A-Z]将匹配“一个或\ Z”)。

<强> --- --- EDIT

好了,让我无法理解的唯一的事情是什么编码您使用的?

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

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

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

使用双反斜杠。 \

... Ummmmmm

在你的编辑你正在谈论的 $阵列,并在约循环的 $ ELEM

莫非是问题?

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

无法复制。当我把它粘贴到文件中您的代码工作正常。

由于您的var_dump()显示你的目标字符串是15个字符的字符串35个字节,但是,它似乎像你有编码问题。如果您运行对utf8_decode($value)代替$value正则表达式,会发生什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top