PHP preg_match-何が悪いのかというこRegEx?
-
18-09-2019 - |
質問
の値がこの形式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 $
彼らはすべて失敗に、ブ~い;(
編集:
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 />";
}
}
結果:ええ試合Elm:123-123-123-12345
また、バックスラッシュが必要なく、正規表現で指定する。のダッシュのみをエスケープする必要はあり[]の群ればならない最初の文字([-a-z]いませんので、"-""a-z"、"a-z"いませんので、"はやz).
---編集---
Okいるということだけ理解できませんどのエンコーディングについてます。
string(36) "123-123-123-12345"
36バイト...最寄たはUTF-16にあり、34バイトまでとなります。このエンコードす。
もできますの変換文字列の前に一旦utf-8にマッチングの正規表現.(もみの日付/時刻パターン文字"u"パラメータの正規表現:'/somreg\d/u'、utf-8に変換)
二重のバックスラッシュを使用してください。 \
Ummmmmm ...
あなたの編集では、のの $列の程度との $のelemはについてのあなたのループの中で話している。
それが問題なのか?
の編集をところで、あなたのデータとの奇妙な何かがあり、私はなぜ文字列(36)を与えている場合のみ17文字を数える
?複製することができません。私は、ファイルに貼り付けたときにあなたのコードは正常に動作します。
あなたのvar_dump()
があなたのターゲット文字列が15文字の文字列のための35バイトであることを示しているので、あなたはエンコードの問題を持っているように、は、しかし、それは思えません。あなたの代わりにutf8_decode($value)
の$value
に対して正規表現を実行した場合はどうなりますか?