这些值将采用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" }
答案 0 :(得分: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);
可能有用,检查它是否真的包含您期望的内容?
答案 1 :(得分: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
正则表达式中也不需要反斜杠。如果破折号不是第一个字符([-a-z]匹配“ - 或者a-z”,但[a-z]匹配“a或\或z”),则只需要在[]组中进行转义。
---编辑---
好的,所以我唯一不理解的是你使用的是什么编码?
string(36) "123-123-123-12345"
36个字节......我得到的最接近的是UTF-16,但只有34个字节。那么你使用的编码是什么?
您还可以尝试在与正则表达式匹配之前将字符串转换为utf-8。 (在转换为utf-8后,也尝试使用regexp中的'u'参数:'/ somreg \ d / u')
答案 2 :(得分:0)
使用双反斜杠。 \
答案 3 :(得分:0)
... Ummmmmm
在您的编辑中,您正在谈论 $ array ,并在您的循环中讨论 $ elem 。
这可能是问题吗?
编辑:顺便说一句,你的数据有些奇怪,我只计算17个字符,为什么要给出一个字符串(36)?
答案 4 :(得分:0)
无法复制。将代码粘贴到文件中时,代码可以正常工作。
由于您的var_dump()
显示您的目标字符串对于15个字符的字符串是35个字节,但看起来您似乎有编码问题。如果您针对utf8_decode($value)
而不是$value
运行正则表达式,会发生什么?