0

値は、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 $

それらはすべてBooHooで失敗します;(

編集:

var_dump($elem)

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

5 に答える 5

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または\またはz」と一致します)。

- - 編集 - -

さて、私が理解できない唯一のことは、どのエンコーディングを使用しているのかということです。

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

36バイト...私が得た最も近いものはUTF-16ですが、34バイトしか得られませんでした。では、使用しているエンコーディングは何ですか?

正規表現と照合する前に、文字列をutf-8に変換することもできます。(utf-8に変換した後、正規表現で「u」パラメーターを使用してみてください:'/ somreg \ d / u')

于 2009-09-25T19:32:37.767 に答える
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 に答える
0

二重の円記号を使用します。\

于 2009-09-25T19:26:06.770 に答える
0

うーん、うーん…。

編集では$arrayについて話し、ループでは$elemについて話します。

それが問題でしょうか?

編集:ところで、あなたのデータに何か奇妙なことがあります、私は17文字しか数えないのに、なぜ文字列(36)を与えるのですか?

于 2009-09-25T20:02:08.773 に答える
0

複製できません。ファイルに貼り付けると、コードは正常に機能します。

ただし、ターゲット文字列が15文字の文字列に対して35バイトであることをvar_dump()示しているため、エンコードの問題があるようです。utf8_decode($value)の代わりに正規表現を実行するとどうなります$valueか?

于 2009-09-25T20:09:20.787 に答える