2

私のjQuery関数でreplace()関数が機能しない理由がわかりません:

jQuery(document).ready(function($){
   var amount_min =  <?php if($_GET['amount_min']) echo $_GET['amount_min']; else echo '0'; ?>;
   var amount_min = amount_min.replace(/[^\d]/g, "");
   $('input[name=amount]').val(amount_min);
});

どのような入力 (たとえば、"100ab" または "10.000") を入力しても、"100" または "10000" に置き換えられません。実行する方法?

4

4 に答える 4

2

二重引用符を付けるのを忘れました。

var amount_min = "<?php if($_GET['amount_min']) echo $_GET['amount_min']; else echo 0; ?>";

なぜなら、replace文字列で動作します。


更新 #1

何らかの宗教上の理由で、PHP を二重引用符で囲みたくない場合は、数値とともに二重引用符を出力してください。

var amount_min = <?php echo '"' . ($_GET['amount_min'] ? $_GET['amount_min'] : 0) . '"'; ?>;

更新 #2

使用できる必須の検証:

var amount_min = <?php echo '"' . (int)($_GET['amount_min']) . '"'; ?>;
于 2012-12-29T15:40:55.850 に答える
1

.replace()コードは必要ありません(文字列でのみ機能します)。PHP はすでに適切な変換を行うことができます。

$(function() {
   var amount_min = <?php echo isset($_GET['amount_min']) ? (int)$_GET['amount_min'] : 0; ?>;
   $('input[name=amount]').val(amount_min);
});

これにはフィルタリングを使用することもできます。

<?php echo filter_input(INPUT_GET, 'amount_min', FILTER_VALIDATE_INT, array('options' => array('default' => 0))); ?>

filter_inputは のような値を受け入れないことに注意してください100abc

JavaScript で文字列を安全に使用したい場合は、json_encode() を使用する必要があります。

ところで、JavaScript コード内の PHP からの未変更のリクエスト変数を含む回答はすべてecho間違っており、XSS 攻撃を引き起こす可能性があります! あなたは警告されました。

アップデート

正規表現ベースの置換は、PHP でも実行できます。

var amount_min = <?php echo (int)preg_replace('/\D+/', '', isset($_GET['amount_min']) ? $_GET['amount_min'] : 0); ?>;

数字以外はすべて削除されるため、(int)キャストを安全に適用できます。

于 2012-12-29T15:55:51.253 に答える
1

あなたのPHPコードは数値を出力しています:

var amount_min = 100;

文字列を想定しているため、引用符で囲みます。

var amount_min =  "<?php if($_GET['amount_min']) echo $_GET['amount_min']; else echo '0'; ?>";

私は何年も PHP に触れていませんが、コードを少し単純化できると思います。

var amount_min =  "<?php echo($_GET['amount_min'] || '0'); ?>";

GETまた、 JavaScript でパラメーターをフェッチするだけではどうですか?

于 2012-12-29T15:40:59.470 に答える
1

これを試してみてください:

$(document).ready(function(){

     var amount_min =  "<?php if($_GET['amount_min']){ echo $_GET['amount_min'];}else{ echo '0';} ?>";

      console.log("original-> "+amount_min);

      var amount_min = amount_min.replace(/\D/g,'');

      console.log("replaced-> "+amount_min); 
});
于 2012-12-29T15:41:02.293 に答える