如何限制文本框中允许的字符数?
Posted
技术标签:
【中文标题】如何限制文本框中允许的字符数?【英文标题】:How to limit the number of characters allowed in a textbox? 【发布时间】:2019-02-23 12:05:02 【问题描述】:<asp:TextBox ID="txtBodySMS" runat="server" Rows="10"
TextMode="MultiLine" Width="100%"></asp:TextBox>
这是我的文本框。如何限制用户可以在其中输入的字符数?
【问题讨论】:
【参考方案1】:MaxLength
不适用于 ASP.NET 到带有TextMode="MultiLine"
的文本框。要做到这一点并保持MultiLine
标记的简单方法是添加:
onkeypress="return this.value.length<=10"
10 是限制。像这样:
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" onkeypress="return this.value.length<=10" TextMode="MultiLine" Width="100%"></asp:TextBox>
编辑选项一(服务器端) 多年来,上面的示例指出了一些问题。根本问题是多行 textBox
被呈现为文本区域,MaxLength
被删除。我们也可以通过强制重新附加MaxLength
而不是附加onkeypress
来修复页面后面的C#或VB asp.net代码。
protected void Page_Load(object sender, EventArgs e)
txtBodySMS.Attributes.Add("maxlength", "10");
编辑选项二(客户端):这是一个简单的 jquery 解决方案。将以下脚本包含在您的脑海中,而不是附加 onkeypress
或编辑服务器端代码。
$(document).ready(function ()
$(".MultiLineLimit").on('change keydown paste input', function ()
this.value = (this.value.length <= 10 ? this.value : this.value.substring(0, 10));
);
);
现在只需将MultiLineLimit
class 添加到TextMode="MultiLine"
的任何<asp:TextBox>
文本框。
<asp:TextBox ID="txtBodySMS" CssClass="MultiLineLimit" runat="server" Rows="10" TextMode="MultiLine" Width="100%"></asp:TextBox>
请记住,在任何一种情况下都可以删除客户端验证。如果您将其存储在数据库中,则它也应始终在服务器端进行验证。
【讨论】:
但是当你达到字符限制时 - 文本框被冻结,你不能从中删除任何内容 这适用于 keydowns,但使用 ctrl+v 将大量文本粘贴到框中会破坏这一点,您仍然可以输入尽可能多的内容 @Rich 你们说的都是对的,这些年来我都没有注意到这一点。我已经修复了【参考方案2】:这是为我做的。我没有保留 MultiLine 属性。
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="2" Width="100%"></asp:TextBox>
【讨论】:
【参考方案3】:MaxLength="Int32"
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220"
TextMode="MultiLine" Width="100%"></asp:TextBox>
【讨论】:
那不行,他们仍然可以输入超过 220 个字符 那么有问题,这是微软记录的财产 不是,需要取出多行【参考方案4】:最大字符长度验证(最多允许 8 个字符)
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator Display = "Dynamic" ControlToValidate = "TextBox1" ID="RegularExpressionValidator1" ValidationExpression = "^[\s\S]0,8$" runat="server" ErrorMessage="Maximum 8 characters allowed."></asp:RegularExpressionValidator>
最小字符长度验证(至少需要 8 个字符)
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator Display = "Dynamic" ControlToValidate = "TextBox2" ID="RegularExpressionValidator2" ValidationExpression = "^[\s\S]8,$" runat="server" ErrorMessage="Minimum 8 characters required."></asp:RegularExpressionValidator>
最小和最大字符长度验证(需要最少 5 个和最多 8 个字符)
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator Display = "Dynamic" ControlToValidate = "TextBox3" ID="RegularExpressionValidator3" ValidationExpression = "^[\s\S]5,8$" runat="server" ErrorMessage="Minimum 5 and Maximum 8 characters required."></asp:RegularExpressionValidator>
【讨论】:
【参考方案5】:AFAIK maxlength 从未与“多行”模式结合使用。因此我会建议一些客户端 js/jquery 和服务器端来解决这个问题。
【讨论】:
【参考方案6】:只需在 .cs 页面加载中输入以下两行
textbox1.Attributes.Remove("MaxLength");
textbox1.Attributes.Add("MaxLength", "30");
希望它会有所帮助!
【讨论】:
当用户复制/粘贴到文本框时,投票最多的答案不起作用。所以这个答案的修改版本(即在 javascript/jquery 中处理)效果最好。【参考方案7】:将 MaxLength 属性设置为字符数。
【讨论】:
【参考方案8】:您正在寻找 MaxLength:看here
【讨论】:
【参考方案9】:您是否尝试过在 TextBox 上设置 MaxLength 属性?为Reference
【讨论】:
【参考方案10】:为您的文本框添加 FliterTextBoxExtender 类型的扩展器 应该是这样的
<asp:TextBox ID="TxtCellular" runat="server"></asp:TextBox>
<asp:FilteredTextBoxExtender ID="TxtCellular_FilteredTextBoxExtender"
runat="server" Enabled="True" TargetControlID="TxtCellular" FilterType="Numbers">
</asp:FilteredTextBoxExtender>
【讨论】:
【参考方案11】:请务必注意,单独使用 MaxLength
(无需添加其他属性,就像其他答案一样)仅适用于 .NET Framework 4.5 及更高版本中的项目。
我使用的是 4.5,它适用于我的项目
<asp:TextBox ID="txtSample" MaxLength="3" runat="server"/>
TextBox.MaxLength Property (MSDN Documentation)
【讨论】:
【参考方案12】:在 ASP.NET 的设计中似乎是一个奇怪的疏忽(撇开 textareas 的异常),您可以设置文本框的 MaxLength 属性,但似乎无法在服务器端强制执行此限制没有明确添加验证器。如果您有很多字段并且只是想确保没有人通过注入自己的 POST 数据来破坏表单的限制,那将是一件麻烦事。所以我写了这个,这似乎可以解决问题 - 显然你可能不想强制 Response.End
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim colControls As Collection = New Collection
getControlList(colControls, Me)
For Each ctlNextPlease As Control In colControls
If TypeOf (ctlNextPlease) Is TextBox Then
Dim ctlTextBox As TextBox = ctlNextPlease
If Len(Request(ctlTextBox.ID)) > ctlTextBox.MaxLength Then
Response.Write("The value <i>" & Request(ctlTextBox.ID) & "</i> submitted for <b>" & ctlTextBox.ID & "</b> exceeds the permitted maximum length (" & ctlTextBox.MaxLength & ") for that value")
Response.End()
End If
End If
Next
...
End Sub
Public Shared Sub getControlList(ByRef colControls As Collection, ByVal rootControl As Control)
colControls.Add(rootControl)
If rootControl.Controls.Count > 0 Then
For Each controlToSearch As Control In rootControl.Controls
getControlList(colControls, controlToSearch)
Next
End If
End Sub
【讨论】:
【参考方案13】:<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220"
TextMode="MultiLine" Width="100%">
</asp:TextBox>
【讨论】:
纯代码答案是低质量的答案。 您需要在代码中添加描述,否则将被视为低质量答案以上是关于如何限制文本框中允许的字符数?的主要内容,如果未能解决你的问题,请参考以下文章