检查输入是否为 GUID
Checking if input is GUID or not
我正在做这个小项目,我要做的是检查用户输入是否为 GUID。
我在 SQL 上创建了这个存储过程,它工作得很好。
ALTER procedure [dbo].[oid_validation] @oid varchar(max)
as
BEGIN TRY
if (TRY_CAST(@oid as uniqueidentifier) IS NOT NULL)
begin
(select select * From Student where oid=@oid)
end
else begin
select 'KO'
end
end TRY
Begin CATCH
print('error')
end CATCH
另一方面,在我的 ASP.NET MVC 应用程序上,我想根据输入是否为 GUID 显示此过程 returns 的数据。
所以我的观点是:
@foreach (DataRow row in Model.Rows)
{
<div class="ct1">
<h4>Oid: </h4>
<h4>Name: </h4>
<h4>Lastname: </h4>
<h4>Study_Year: </h4>
<h4>Birthday: </h4>
<h4>City:</h4>
</div>
<div class="ct2">
<h4>@row["oid"]</h4>
<h4>@row["Name"]</h4>
<h4>@row["Lastname"]</h4>
<h4>@row["StudyYear"]</h4>
<h4>@row["Birthday"]</h4>
<h4>@row["City"]</h4>
</div>
}
这也很好用。这样,用户将再次看到他们想要的数据,*基于该输入是否为 guid。
现在我要做的是操纵某些东西,以便在用户输入无效输入时显示一些文本或重定向到其他地方;
像这样:
if(userinput!=guid)
{
<h4>Your data is invalid, please check your string!</h4>
}
else
{
//foreach(...)
{
<data1>
@<data1>
}
}
您始终可以使用正则表达式来检查输入:
//returns true
Regex.IsMatch(Guid.NewGuid().ToString(), @"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$")
或使用建议的内置函数:
Guid g;
if (Guid.TryParse(Guid.NewGuid().ToString(), out g))
{
return "Success";
}
我认为您在错误的级别进行输入验证。您的存储过程应该采用唯一标识符,并且您应该在对 ASP.NET MVC 端点进行任何操作之前验证输入。
例如
ActionResult SearchStudents(SearchParams searchParams) {
if (!ModelState.IsValid) ... handle validation errors
... Call your stored procedure once valid
}
class SearchParams {
[Required]
Guid StudentId { get; set;}
}
我正在做这个小项目,我要做的是检查用户输入是否为 GUID。
我在 SQL 上创建了这个存储过程,它工作得很好。
ALTER procedure [dbo].[oid_validation] @oid varchar(max)
as
BEGIN TRY
if (TRY_CAST(@oid as uniqueidentifier) IS NOT NULL)
begin
(select select * From Student where oid=@oid)
end
else begin
select 'KO'
end
end TRY
Begin CATCH
print('error')
end CATCH
另一方面,在我的 ASP.NET MVC 应用程序上,我想根据输入是否为 GUID 显示此过程 returns 的数据。 所以我的观点是:
@foreach (DataRow row in Model.Rows)
{
<div class="ct1">
<h4>Oid: </h4>
<h4>Name: </h4>
<h4>Lastname: </h4>
<h4>Study_Year: </h4>
<h4>Birthday: </h4>
<h4>City:</h4>
</div>
<div class="ct2">
<h4>@row["oid"]</h4>
<h4>@row["Name"]</h4>
<h4>@row["Lastname"]</h4>
<h4>@row["StudyYear"]</h4>
<h4>@row["Birthday"]</h4>
<h4>@row["City"]</h4>
</div>
}
这也很好用。这样,用户将再次看到他们想要的数据,*基于该输入是否为 guid。 现在我要做的是操纵某些东西,以便在用户输入无效输入时显示一些文本或重定向到其他地方;
像这样:
if(userinput!=guid)
{
<h4>Your data is invalid, please check your string!</h4>
}
else
{
//foreach(...)
{
<data1>
@<data1>
}
}
您始终可以使用正则表达式来检查输入:
//returns true
Regex.IsMatch(Guid.NewGuid().ToString(), @"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$")
或使用建议的内置函数:
Guid g;
if (Guid.TryParse(Guid.NewGuid().ToString(), out g))
{
return "Success";
}
我认为您在错误的级别进行输入验证。您的存储过程应该采用唯一标识符,并且您应该在对 ASP.NET MVC 端点进行任何操作之前验证输入。
例如
ActionResult SearchStudents(SearchParams searchParams) {
if (!ModelState.IsValid) ... handle validation errors
... Call your stored procedure once valid
}
class SearchParams {
[Required]
Guid StudentId { get; set;}
}