2016-06-23 7 views
0

ユーザは、$num_strに格納されている番号を入力します。私は$num_strがSQLフォーマットdouble(9,2)と厳密に一致することを(PHPを使って)チェックする必要があります。換言すれば、ユーザ入力がSQL double(size、d)タイプと互換性があることを確認しますか?

  1. $num_strタイプfloat(すなわちdouble)であることを確認
  2. $num_str
  3. $num_strに1から9つの数字を含有小数点以下2桁(期間.後、すなわち2桁)が含まれ;そうでない場合は、末尾の0を小数点の後に追加する必要があります。しかし、そのような連結が条件2に違反する場合は、エラーを出力する必要があります。ここで

は、私が試したものです:

私はステップ3エレガントかつ効率的にこれを行う方法上の任意のアイデアを実装しているにトラブルを抱えています何
// 1. 
if (filter_var($num_str, FILTER_VALIDATE_FLOAT) === false) echo "Invalid input"; 

// 2. 
$num_str_nodecimal = str_replace(".", "", $num_str); // remove decimal point 
if (strlen($num_str_nodecimal) > 9) echo "Invalid number length"; 

// 3. 
if (strlen(substr(strrchr($num_str, "."), 1)) != 2) // less or more than 2 decimal places 
    ??? 

?そのための任意のネイティブPHPメソッド?ありがとうございます

答えて

0

正規表現との照合を試してください。文字列の先頭

  • "$" - - 文字列
  • の終わり

    • "^":

      if (preg_match('/^\d{1,7}\.\d\d$/', $num_str) === 1) { 
          // two decimals 
      } else if (preg_match('/^\d{1,7}\.\d$/', $num_str) === 1) { 
          // one decimal 
      } else if (preg_match('/^\d{1,7}$/', $num_str) === 1) { 
          // no decimals 
      } else { 
          // input is invalid 
      } 
      

      これらが使用される正規表現の重要な部分です:あなたはこのような何かを試すことができます"\ d" - 数字の文字

    • "。" - ポイント文字(ちょうど "。"は正規表現内の任意の文字を表し、バックスラッシュはそれをエスケープします)
    • "1,7" - 文字に1〜7回一致
  • 関連する問題