gpt4 book ai didi

c# - 4 位数字的正则表达式,包括第一个位置的 0 不能正常工作

转载 作者:行者123 更新时间:2023-12-04 10:51:20 24 4
gpt4 key购买 nike

我需要一个只允许 4 位数字的正则表达式,这四个数字可以在任何位置包含 0。

下面是我的代码:

看法 :

<label asp-for="UserId"></label><br />
<input asp-for="UserId" class="form-control" maxlength="4" />
<span asp-validation-for="UserId" class="text-danger"></span>

模型 :
[RegularExpression(@"^([0-9]{4})$", ErrorMessage = "Please enter last 4 digits of your user Id.")]
[Display(Name = "Last 4 digits of user Id")]
public int? UserId{ get; set; }

但是如果我输入 0645,它会抛出一个错误“请输入您的用户 ID 的最后 4 位数字。”。如果我把它改成 4567,它工作正常。那么我应该如何修复我的正则表达式?

最佳答案

您的正则表达式没有任何问题。正如评论中已经说过的,您的属性是一个整数,当您在内部将其值设置为 0645 时,它会转换为 int 并变为 645。

如果您查看 RegularExpressionAttibute 类,第 59 行,在 GitHub 上,您将意识到方法 IsValid 接收和对象,然后将其解析为字符串。

因此,让我们看看数据的完整流向。

1) 您的用户在文本框中键入一个值。 (“0645”)

2) ModelBinder将输入的字符串转换为整数。 (645)

3) 内部RegularExpressionAttibute.IsValid您的整数再次转换为字符串(“645”)

4) 正则表达式应用于值 ("645") 而不是 ("0645")。所以它不会通过你的验证。

这是RegularExpressionAttibute.IsValid方法。

override bool IsValid(object value) {
this.SetupRegex();

// Convert the value to a string
string stringValue = Convert.ToString(value, CultureInfo.CurrentCulture);

// Automatically pass if value is null or empty. RequiredAttribute should be used to assert a value is not empty.
if (String.IsNullOrEmpty(stringValue)) {
return true;
}

Match m = this.Regex.Match(stringValue);

// We are looking for an exact match, not just a search hit. This matches what
// the RegularExpressionValidator control does
return (m.Success && m.Index == 0 && m.Length == stringValue.Length);
}

什么是解决方案/建议?

您期望输入 4 位数字,直到现在您还没有说必须对此进行任何类型的计算。

由于您不需要进行任何计算,因此可以将其保留为字符串而不会造成任何伤害。只需继续验证您的字符串是否包含 4 位数字(您已经在这样做了)。

如果您将来需要进行任何计算,只需在需要时将字符串转换为整数即可。

所以只需更改这一行:
public int? UserId{ get; set; }
对此:
public string UserId{ get; set; }

关于c# - 4 位数字的正则表达式,包括第一个位置的 0 不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59456726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com