我的网站区域允许用户输入自定义网址。 URL的规则是它必须是字母数字,连字符除外。如果使用连字符,则它不能是连续的,也不能开始(或结束)字符串。
我使用以下函数来实现此目的:
$('.url').bind("change keyup blur", function() {
var url = $(this);
url.val( url.val().replace(/[^A-z0-9-]/gi,'').replace(/-{2}/g,'-').replace(/^-/g,'') );
});
该功能运作良好,但我想知道这是一个好的做法,还是可以将规则合并到一个替换语句中。
如果使用连续的连字符( - ),连字符会替换它,所以我想至少需要2个替换语句。
我正在以“这是你应该使用的代码”的形式得到很多回答,而且我很欣赏它,我的功能正在发挥作用。我最终给出了一个例子,说明我对单个值的多个替换语句的意思,以及这样做的好/坏做法。
我认为给出代码提示或建议会有所帮助,但这不是“我如何缩短此代码”的问题。
答案 0 :(得分:4)
使用多个替换功能并不是特别糟糕的做法。事实上,fastest compatibility implementations of trim使用多个替换语句,因为在字符串的开头和结尾搜索两个单独的正则表达式比同时执行这两个操作的组合表达式更快。</ p>
但是,如果您不担心性能,那么可以使用|
组合表达式,稍作修改即可使用积极的前瞻而不是Daniel的{{1}建议}:
-{2,}
答案 1 :(得分:3)
我认为你这样做的方式是公平的。正则表达式很快就会变得难以理解。他们也有出错的倾向:)
但是我会考虑将替换例程分解为单独的函数。
答案 2 :(得分:1)
您可以说替换2个或更多个连字符。
.replace(/-{2,}/g,'-')
// ^ notice the comma
答案 3 :(得分:0)
可能单个正则表达式会“更快”,但是现在使用短文本和三个简单模式,它已经足够快了。
对我来说没问题