.replace()在jQuery函数中不起作用

时间:2012-12-29 15:39:46

标签: javascript jquery

我不明白为什么replace()函数不适用于我的jQuery函数:

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 个答案:

答案 0 :(得分: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']) . '"'; ?>;

答案 1 :(得分: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'); ?>";

另外,为什么不用JavaScript获取GET参数?

答案 2 :(得分: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); 
});

答案 3 :(得分: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)强制转换。