我不明白为什么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”替换它。 怎么办?
答案 0 :(得分:2)
你忘了加双引号。
var amount_min = "<?php if($_GET['amount_min']) echo $_GET['amount_min']; else echo 0; ?>";
因为,replace
适用于字符串。
如果出于任何宗教原因,你不想用双引号包装PHP,那么将它们与数字一起输出。
var amount_min = <?php echo '"' . ($_GET['amount_min'] ? $_GET['amount_min'] : 0) . '"'; ?>;
您可以使用强制验证:
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)
强制转换。