我要提出一个类似的方法为Niklas' answer(是前面我被一些重要的事情打断,或者可能是一只松鼠)。所以去那个(和我+1
)。
几个百分点,但:
- 验证的
width
和height
领域的内容。或者至少使用parseInt
。否则,如果用户输入非数字字符,则正则表达式将停止匹配...
- 匹配
[0-9]*
而不是[0-9]+
。如果用户将字段留空,后者将打破正则表达式。当然,做val = parseInt(...) || 0
也会修复它。
换句话说,我会做这样的事情:
的jsfiddle:http://jsfiddle.net/PPvG/j8dT9/
var re = /\/Content\/Image\/([0-9]*)\/[0-9]*\/[0-9]*\//,
url = $('#url'),
val = url.val(),
width = parseInt($("#txtwidth").val(), 10) || 0,
height = parseInt($("#txtheight").val(), 10) || 0;
if (re.test(val)) {
val = val.replace(re, "/Content/Image/$1/" + width + "/" + height + "/");
url.val(val);
}
此外,如果路径(/Content/Image/
)可能会改变未来,你可以使用这个更一般的正则表达式:/^\/(.+)\/([0-9]*)\/[0-9]*\/[0-9]*\//
并让替换字符串以/$1/$2/
开头。 (见this JSFiddle。)
最后,我不会绑定到keypress
。除了某些浏览器可能出现的副作用(如change
事件未得到处理)之外,还有一个UX问题。大多数用户用于输入处理其输入的小部件,因为他们的本机应用程序是以这种方式工作的。此外,许多用户在输入数字时会看到他们的键盘(现在的数字越来越少)。
比我的更好的实现:考虑按键事件并使用两个输入的一个代码的好主意。 – CedX 2011-12-30 11:16:19
当我使用.live而不是.bind时,Worked很好:) tyvm :) – 2011-12-30 11:49:20