0

ユーザーが入力した値にゼロ以外の正の数値が含まれているかどうかを検出する必要があります。入力フィールドは製品の数量を表し、ゼロより大きく、英字または非数字を含まないようにする必要があります。IOW、入力には次の文字のみが含まれている必要があります:0123456789しかし、もちろん、ゼロ自体は受け入れられません。コードの使用方法は次のとおりです。

  if( $fields{'quantity'} =~ [this is where I am unsure]  )
  {
    $errors .= "Please enter a whole number for the quantity.";
  }

ありがとう。

4

3 に答える 3

4

のような文字列1E4も数値であるため、すべての数値に[0-9]のみを含める必要はありません。

looks_like_numberによって提供される関数はScalar::Util、変数が数値であるかどうかをチェックする正しい方法です。

use Scalar::Util 'looks_like_number';

if ( not looks_like_number( $fields{quantity} ) or $fields{quantity} <= 0 ) {

    warn "Please enter a whole number for the quantity";
}

同じことをもっと簡潔に:

warn "Please enter a whole number for the quantity"
  unless looks_like_number( $fields{quantity} )
         && $fields{quantity} > 0;

のような文字列は数値と見なされるためNan、これらの文字列を削除することも検討してください。InfInfinity

warn "Please enter a whole number for the quantity"
  unless looks_like_number( $fields{quantity} )
         && $fields{quantity} !~ /Inf|NaN/i
         && $fields{quantity} > 0;
于 2013-01-20T12:59:29.683 に答える
3

入力のようにエキゾチックなものを許可する必要はありません1E4。数字の文字列を入力するだけです。

また、入力された値の真偽をチェックするとundef、ゼロと空の文字列が削除されるため、これは正常に機能します。入力が定義され、空でなく、ゼロでなく、数字以外の文字が含まれていないことを確認します。

unless ($fields{quantity} and $fields{quantity} !~ /\D/) {
  $errors .= "Please enter a whole number for the quantity.";
}
于 2013-01-20T13:44:43.460 に答える
2

@Zaidによる回答が指摘したように、 looks_like_numberfrom Scalar :: Utilを使用する方が安全だと思いますが、正規表現バージョンは次のとおりです。

if (not defined $fields{'quantity'}) or $fields{'quantity'} !~ /^[0-9]+$/ or $fields{'quantity'} <= 0) {
    $errors .= "Please enter a whole number for the quantity.";
}
于 2013-01-20T13:00:18.227 に答える