我有一个小的应用程序,用asp .net C#编写,它从文本框中的用户获取输入,有两个按钮 - 在点击第一个按钮时,我将使用特定于文化的值填充第二个文本框。我正在尝试将输入值设置为culture en-ZA。
这是我在cs文件中的代码,
protected override void InitializeCulture()
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-ZA");
//base.InitializeCulture();
}
protected void btnCulture_Click(object sender, EventArgs e)
{
decimal val = Convert.ToDecimal(txtValue.Text, System.Globalization.CultureInfo.CurrentCulture);
txtConverted.Text = val.ToString("0,0.00");
}
现在,点击第二个按钮,我编写了一个javascript函数,它将从文本框中读取值并尝试将其与正则表达式匹配。
示例输入12345被解析为12 345.00,并且希望正则表达式是这样的 - > ^ [+ - ]?[\ d \] 。?\ d ([] [+ - ]?\ d +)?$但这不起作用。在调试时,该值从文本框中读取为12-345.00但是,“ - ”不是一个连字符。我在网上搜索并发现了一些引用'\ xa0'的十六进制空格,但我找不到任何办法在正则表达式中处理这个问题。这是javascript函数:
function regexTest() {
var exp = new RegExp("^[+-]?[\\d\\ ]*\\.?\\d*([][+-]?\\d+)?$");
var price = document.getElementById("txtConverted").value;
if (price.match(exp)) {
alert("pass");
return true;
}
else {
alert("fail");
return false;
}
}
编辑:为了进一步理解,我得到了一个像这样的角色 -
答案 0 :(得分:1)
您可以使用下面的表达式来捕捉空格或连字符。但我建议你先使用string.Replace(“ - ”,“”)删除连字符。
var exp = new RegExp(@"^[+-]?[\d\s|-]*\.?\d*([][+-]?\d+)?$");
字符串前面的@用于删除转义字符。
答案 1 :(得分:1)
您只需将\xao
(不间断空格)添加到角色类,即[\\d\\xao]
。
它是一个十六进制转义序列,表示十进制unicode代码点160处的字符。