en-ZA .net 中的格式文化问题

Posted

技术标签:

【中文标题】en-ZA .net 中的格式文化问题【英文标题】:Format culture issue in en-ZA .net 【发布时间】:2013-03-28 13:49:39 【问题描述】:

我有一个小应用程序,用 asp .net C# 编写,它在文本框中接受用户的输入,有两个按钮 - 单击第一个按钮时,我将使用文化特定值填充第二个文本框。我正在尝试将输入值设置为文化 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;
    

编辑:为了进一步理解,我得到了一个这样的角色 -

【问题讨论】:

【参考方案1】:

您只需将\xao(不间断空格)添加到字符类,即[\\d\\xao]。 它是一个十六进制转义序列,表示十进制 unicode 代码点 160 处的字符。

【讨论】:

【参考方案2】:

您可以使用下面的表达式来捕捉空格或连字符。但我建议您先使用 string.Replace("-", "") 删除连字符。

var exp = new RegExp(@"^[+-]?[\d\s|-]*\.?\d*([][+-]?\d+)?$");

字符串前面的@去掉转义字符。

【讨论】:

实际上那个字符不是连字符。当我在 sql 编辑器中复制它时,它的 - 为红色。当我更改正则表达式以捕获连字符时,它不起作用。 我已经编辑了问题并添加了我在调试时将文本框值的内容粘贴到 sql 编辑器中的内容 谢谢一堆!!它适用于 xa0 :) :) 但我有一个问题,在我的实际应用程序中,我正在动态创建这个正则表达式;应用程序根据配置获取格式文化。并且正则表达式是使用来自该文化的文化信息的“NumberGroupSeparator”和“DecimalSeparator”构建的。现在,这种文化的数字分隔符是空格,对于其他文化,它可能是别的东西知道我可以如何合并,在这种情况下是 xa0 吗? (我不想在那里有条件逻辑:()。 yes.. 类似的东西,但是 en-ZA 文化有问题,因为它有分隔空间,实际上不是“\”或“\s”,而是 \xa0 如果您的字符串之间出现意外字符,那么您可能需要先找到一种方法将它们删除,将它们与特定的文化相匹配。

以上是关于en-ZA .net 中的格式文化问题的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:使用 .NET String.Format() 之类的文化格式化数字/货币?

使用当前文化定义的 12 或 24 小时格式从 DateTime 获取一天中的小时

.NET 4.5 DateTime 格式/转换错误与上索布文化

VB.NET 根据所选文化格式化数字

Javascript中的文化特定日期时间

如何在asp.net core razor pages 2.2中设置日期格式和文化