如何限制文本框中允许的字符数?

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));
        );
    );

现在只需将MultiLineLimitclass 添加到TextMode="MultiLine" 的任何&lt;asp:TextBox&gt; 文本框。

<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>

【讨论】:

纯代码答案是低质量的答案。 您需要在代码中添加描述,否则将被视为低质量答案

以上是关于如何限制文本框中允许的字符数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将文本字段中允许的最大输入值限制为 10? [复制]

如何限制在 MFC 的文本框中键入的字符数?

如何限制文本框输入长度

C#限制文本框输入

VB文本框怎样限制只能输入数字值

vb中,如何限制输入的文本框的内容只能是数字数或者字母?