【问题标题】:RegEx to enfore 3 digits, padleft正则表达式强制执行 3 位数字,padleft
【发布时间】:2016-04-13 04:16:03
【问题描述】:

我需要为仅允许数字 0-9 的文本框创建一个编辑掩码(就其本身而言,很简单!),但必须始终为 3 位长,如果 69 之类的数字,则用 0 填充进入。它用于保存方位角值的文本框,因此当控件失去焦点时,我希望诸如 78 之类的方位显示为 078。

在另一个帖子中提出了以下建议,但这不是我的要求:

someText = Regex.Replace(someText, @"\d+", n => n.Value.PadLeft(8, '0'));

目前我在 Validated 事件中执行以下操作,但我觉得 RegEx 编辑掩码可能更优雅:

textBox.Text = textBox.Text.PadLeft(3, '0');

【问题讨论】:

  • 您也可以使用 MaskedTextBox 和 000 掩码。
  • 好吧,在您提供更多要求之前,我认为屏蔽文本框是最干净的解决方案。
  • 各位,对不起!!!不敢相信我这么厚!!当然,一个简单的000面具就是答案!对不起,我浪费了你的时间。让我去生闷气吧。现在... :(
  • 此外,您可以将PromptChar 设置为零以获得外观。
  • @juharr:实际上,我在编写第一条评论之前创建了带有 PromptChar 设置为 0 的屏蔽文本框,但没有添加该信息位。有点分心了。

标签: c# regex winforms


【解决方案1】:

您也可以将MaskedTextBox000 掩码一起使用。

Mask
获取或设置在运行时使用的输入掩码。

还有MaskedTextBox.Mask Property reference

屏蔽元素      说明
0                              数字,必填。此元素将接受 0 到 9 之间的任何单个数字。
9                                数字或空格,可选。
#                                                                                                                                                                                                               数字或空格,可选如果此位置在掩码中为空白,则会在 Text 属性中呈现为空格。允许使用加号 (+) 和减号 (-)。

那里有更多选择。

此外,您可以将 PromptChar 设置为 0 以使其看起来不错(就像填充一样)。

编辑:

我刚刚尝试为 TextChanged 事件创建一个函数,以在没有屏蔽文本框的情况下实现您想要的。只是为了练习:

private void textBox2_TextChanged(object sender, EventArgs e)
{
    var sel = textBox2.SelectionStart;
    if (string.IsNullOrWhiteSpace(textBox2.Text))
    {
        textBox2.Text = "000";
        return;
    }
    if (sel != 0)
    {
        var symbol_entered = textBox2.Text.Substring(sel - 1, 1);
        if (!Char.IsDigit(symbol_entered.ToCharArray()[0]))
        {
            sel--;
            textBox2.Text = textBox2.Text.Remove(sel, 1);
        }
        else
        { // entered a digit
            if (textBox2.Text.Length == 4 && textBox2.SelectionStart == 4) // last digit entered 
                textBox2.Text = textBox2.Text.Substring(0, 3).PadLeft(3, '0'); // trim it
            else if (textBox2.Text.Length == 4)
                textBox2.Text = textBox2.Text.Remove(sel, 1);
         }
    }
    if (!string.IsNullOrWhiteSpace(textBox2.Text)) // removed the first digit
    {
        textBox2.Text = textBox2.Text.PadLeft(3, '0'); // trim it
        textBox2.SelectionStart = sel;
    }
}

玩得开心! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多