我有两个文本字段,一个名为business_name,另一个名为slug。我有它,以便当一个人在商业名称中键入指定的字段时,该值被复制到slug字段中。我还希望进入slug字段的值除去所有内容,但保留字母和数字,并用hypen替换空格。这就是我目前的情况,firebug不会告诉我任何错误,所以我不知道我做错了什么
$(document).ready(function() {
var business_name = '';
$("#business_name").bind('keypress', function() {
business_name = $(this).val();
business_name.replace('/[a-zA-Z0-9]\s+/g', '-').toLowerCase();
$("#slug").val(business_name);
});
});
答案 0 :(得分:0)
这里有两个问题 - 当你打电话给替换时,请不要在正则表达式周围加上引号。你想要一些形式:
business_name.replace(/[a-zA-Z0-9]\s+/g, '-')
此外,它不会替换原始字符串中的值 - 它返回带有替换文本的新字符串。因此,当您设置#slug的值时,您仍然在查看原始值。
你所拥有的正则表达式也没有达到你想要的效果,所以我把它更改为首先删除任何不是字母,数字或空格的东西,然后将任何空格转换为破折号
您可以将子弹线更改为
$("#slug").val(business_name.toLowerCase().replace(/![a-z0-9\s]/g, '').replace(/\s/, '-'));
我把你的小提琴分开了here
答案 1 :(得分:0)
第一个问题:string.replace
没有变异字符串,它会创建一个新字符串。
第二个问题:你的正则表达式会匹配所有字符,你只想匹配任何不是字母或数字或空格的东西并将其删除。
第三个问题:正则表达式不是字符串。它们不需要用引号括起来
类似的东西:
business_name = business_name.replace(/\s+/g,'-').toLowerCase(); // replace spaces
business_name = business_name.replace(/[^a-zA-Z0-9-]/g,''); // remove other characters