C# ASP.NET - 用户击键验证并将字符输入到正确的位置

问题描述 投票:0回答:1

我希望有一个以 00:00 开头的时间字段,这正是我想要的格式。

当用户键入时间时,我想读取击键并将其放置在我预先分配的值内。

例如,当我输入“7”时 - 我希望它显示 07:00。 然后输入“a”: - 它实际上会忽略它并仍然返回 07:00,然后输入“3” - 它会返回 07:30

  • 验证仅接受第一个字符中的 1
  • 第二个字符的验证需要查看第一个字符的 0 或 1 来决定是 0-9 还是只是 0-1
  • 第三个字符的验证将为 0-5
  • 验证将接受第 4 个字符中的 0-9
  • 它不会接受任何其他值

所以另一个版本是

  • 输入 1 - 随后将显示 10:00
  • 输入 7 - 然后将显示 10:07

所以另一个版本是

  • 输入 1 - 这将显示 10:00
  • 输入 3 - 这将显示 10:30

寻找每次都使用此逻辑(或更简单更有效的版本)但不会用 00:00 覆盖每次迭代的时间的东西。这显然只是没有 Form 功能的 C#,这就是我陷入困境的地方。

using System;

string time = "00:00";
char[] cA = time.ToCharArray();
string entry = "0";
int entryNum = 0;

if (TryNumber(entry)) 
{ 
    entryNum = Convert.ToInt32(entry); 
}

int valueToChange = CharNum(cA[0], cA[1], cA[3], cA[4]);

if (valueToChange == 0)
{
    if (Char1(entryNum))
    {
        time = entry + cA[1] + cA[2] + cA[3] + cA[4];
    }
    else
    {
        valueToChange = valueToChange + 1;
    }
}

if (valueToChange == 1)
{
    int v1 = 0;

    if (cA[0].Equals('1')) { v1 = 1; }

    if (Char2(v1, entryNum))
    {
        time = cA[0] + entry + cA[2] + cA[3] + cA[4];
    }
    else
    {
        valueToChange = valueToChange + 2;
    }
}

if (valueToChange == 3)
{
    if (Char3(entryNum))
    {
        time = cA[0] + cA[1] + cA[2] + entry + cA[4];
    }
    else
    {
        valueToChange = valueToChange + 1;
    }
}

if (valueToChange == 4)
{
    if (Char4(entryNum))
    {
        time = cA[0] + cA[1] + cA[2] + cA[3] + entry;
    }
    else
    {
        valueToChange = 9;
    }
}

if (valueToChange == 9)
{
    time = $"{cA[0]}{cA[1]}{cA[2]}{cA[3]}{cA[4]}";
}

Console.WriteLine(time);

bool Char1(int value)
{
    bool result = false;
    if (value == 0 || value == 1) { result = true; }
    return result;
}

bool Char2(int value1, int value)
{
    bool result = false;
    if (value1 == 0 && value >= 0 && value <= 9) { result = true; }
    else if (value1 == 1 && value >= 0 && value <= 1) { result = true; }
    return result;
}

bool Char3(int value)
{
    bool result = false;
    if (value >= 0 && value <= 5) { result = true; }
    return result;
}

bool Char4(int value)
{
    bool result = false;
    if (value >= 0 && value <= 9) { result = true; }
    return result;
}

int CharNum(int v1, int v2, int v3, int v4)
{
    int result = 0;
    if (v4 > 0) { result = 9; }
    else if (v3 > 0) { result = 4; }
    else if (v2 > 0) { result = 3; }
    else if (v1 == 1) { result = 1; }
    return result;
}

bool TryNumber(string value)
{
    string e = value;
    int i = 0;

    if (int.TryParse(value, out i))
    {
        return true;
    }
    else
    {
        return false;
    }
}
c# asp.net validation blazor keystroke
1个回答
0
投票

也许您使用内置的文本模式=时间。

它不是100%如你所问,但你的规范有一些“问题”。

例如,如果我想要 10:30,还是 1:30?

所以,10:03 的 1 和 3 没有意义,因为我可能想要:

 1:03
10:03
 1:30
10:30

因此,输入 1,然后输入 3 并不能真正得到 10:03,那么您将如何输入 10:30?

正如我所说,您可能最好使用默认文本模式=时间。

它将执行您所要求的大部分操作,不允许用户输入非数字字符,并格式化您想要的大部分内容。

所以,说我想要 10:30

如果我输入 1,0,3,那么这就是我得到的 例如,这个:

标记:

       <h3>enter time</h3>
        <asp:TextBox ID="txtTime" runat="server"
            TextMode="Time">
        </asp:TextBox>

所以,10:30,然后是 1,0,3

现在,上面当然有AM/PM

我们只需尝试谷歌,看看是否可以删除 am/pm。

如果您需要超过 12 小时,那么上述内容很可能对您没有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.