我正在尝试用javascript / Jquery方法替换ASP.NET(C#)服务器端方法。我对Jquery很新,但一切顺利,直到我开始使用正则表达式。
我在ASP.NET C#中的代码
if ((Regex.Match(postcode.Trim(), @"^[1-9]\d{3} ?[a-zA-Z]{2}$")).Success)
{
return Regex.Replace(postcode.Trim(), @"(^[1-9]\d{3})( ?)([a-zA-Z]{2}$)", "$1$3").ToUpper();
}
else
{
throw new Exception("Postcode incorrect");
}
在Jquery中我只是通过手动输入正确的字符串来专注于替换当下。
我创建了一个类似的函数:
function FormatDutchPostalCode() {
var postcode = $("#Text1").val();
postcode = postcode.replace(/(^[1-9]\d{3})( ?)([a-zA-Z]{2}$)/, $1$3);
$("#Text1").val(postcode);
}
我从文本框中获取了价值,到目前为止一切都很好。但是当替换它时,似乎浏览器退出该功能(在IE9和FF10.0.1中测试)
我做错了什么,是否有可能对Jquery / Javascript进行故障排除。我见过firebug可以设置断点,但我找不到是否(以及如果出现)错误。
答案 0 :(得分:1)
您需要使用'$1$3'
或/$1$3/
作为替换模式。目前,您已将替换模式放在不使用它作为字符串或正则表达式模式。
查看此jsFiddle link,显示有效的解决方案。
您还可以通过删除可选空间的捕获组来简化模式,然后可以使用现有捕获组执行替换:
/^([1-9]\d{3}) ?([a-zA-Z]{2})$/
'$1$2'
(仅存在2个组)要使用Firebug或开发人员工具,您应该能够使用 F12 键启动该工具。您可以直接在控制台窗口中测试替换,或者从脚本选项卡调试脚本(选择相关的JavaScript文件),并通过右键单击并添加它或单击行号在您感兴趣的行上放置断点在左边。
查看此文章了解更多详情:JavaScript debugging for beginners。
答案 1 :(得分:1)
这是JS的C#函数的一个端口。它使用IIFE来缓存正则表达式而不会污染当前的执行范围。
var FormatDutchPostalCode = (function() {
var reg = /^([1-9]\d{3})\s?([a-z]{2})$/i;
return function(){
var postcode = $.trim($("#Text1").val());
if (postcode && postcode.match(reg) )
{
return postcode.replace(reg, "$1$2").toUpperCase();
}
else
{
throw new Error("Postcode incorrect");
}
};
}());