2012-06-12 27 views
5
<?php 

    $string = 'user34567'; 

      if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){ 
       echo 1; 
      } 

?> 

私は、文字列がユーザーは8つのシンボルの最大可能数で、次の単語を持っているかどうかを確認したいです。正規表現

答えて

10

あなたが実際に非常に近いです:

if(preg_match('/^user[0-9]{1,8}$/', $string)){ 

「文字列の先頭に一致しなければならない」ためのアンカーは、「ユーザー」リテラルに続いて、前にすべての方法でなければなりません。文字セット[0-9]と乗数{1,8}を指定します。最後に、「文字列の最後に一致する必要があります」アンカーで終了します。あなたの元の式に

いくつかのコメント:

  1. ^ので、この式の中のどこにそれを書いたが初めは
  2. +が期待される結果が得られないであろう、文字列の先頭にマッチします乗算器。 {1,8}も1つですが、式の後に1つの乗数しか使用できません。
  3. 式で見つかった番号を使用しない場合は、かっこは必要ありません。

Btw [0-9]の代わりに\dを使用することもできます。この特定の1が保存されませんが、それは、正規表現を短縮し、自動文字グループです

2

あなたが接近していた、ここにあなたの正規表現のすべての文字数が多すぎ;-)です:/^user[0-9]{1,8}$/

1

代わりに、次の正規表現を試してください。

/^user([0-9]{1,8})$/

1

この正規表現を使用しますを使用することにより

/^user\d{1,8}$/ 
3

をと$の場合は、パターンが行の唯一のものである場合にのみ一致します。それはあなたが欲しいものですか?その場合は、次のようにします。

preg_match('/^user[0-9]{1,8}[^0-9]$/' , $string); 

あなたはどこにでも行でこのパターンを見つけたい場合は、私がしようとするだろう。いつものように

preg_match('/user[0-9]{1,8}[^0-9]/' , $string); 

を、あなたは何をするRegexPalのようなリファレンスツールを使用する必要があります正規表現を単独でテストします。