[原创]删除多行文本框中的空白行

在调研或投票程序中,常将选项填到多行文本框,每行一个选项,但会产生空白行。一般用数组处理较麻烦,本文采用正则表达式处理,给出了处理函数及相关代码示例,可简洁地消除文本框中因偶然错误输入产生的空白行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除多行文本框中的空白行

在一些调研或者投票程序中,经常都要设置题目的各个选择支,最常见的办法有两种:

1. 每次添加一个选择支,如果该题目有N个选项,就添加N次;

2. 把所有的选项都填写入一个文本框中,用特殊的分隔符(如:“$”等)分隔各个选项,然后再对所得的内容进行处理。

 

如果调研或投票程序中只有少量题目第一种方法尚且还行得通,在题目较多是就显得比较繁杂。因此,很多情况下都采用第二种。

在第二种做法中,比较方便、直观也采用得比较多的是把全部选项都填写到多行文本框中,每个选项分别占用一行,然后根据填写的内容一次性生成题目的选择项。但这种方法伴随着一个问题:如何消除因偶然的错误输入所产生的空白行。

 

可能产生的空白行主要有纯粹由一个回车产生的空白行和由一个或多个空格产生的空白行两种(也有可能由制表符或制表符和空格混合产生的空白行,但这种极少见,处理方法也类似)。产生空白行的地方有三处:段首、段中和末尾。而且每处空白可能由一行或多行构成。

一般的处理方法是分割各个选项,采用数组存储,遍历数组,如果数组的项为空,则删除该项,然后生成选择项。自己遇到了这种情况,觉得用数组处理比较麻烦,相比之下采用正则表达式比较简洁。

函数如下:

Imports System.Text.RegularExpressions

 

Function DealWithBlank(ByVal str As String) As String

      

       处理前后和中间的空格空白行

str = Regex.Replace(str, "^ */r/n", "", RegexOptions.Multiline)

str = Regex.Replace(str, "/r/n *$", vbCrLf, RegexOptions.Multiline)

 

处理回车产生的回车空白行

str = Regex.Replace(str, "(/r/n){1,}", vbCrLf)

str = Regex.Replace(str, "/r/n$", "")

 

返回满足文本框格式的字符串

Return str

End Function

 

例子:

Index.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="index.aspx.vb" Inherits="Test.WebForm1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

         <HEAD>

                   <title>WebForm1</title>

                   <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">

                   <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">

                   <meta content="JavaScript" name="vs_defaultClientScript">

                   <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">

         </HEAD>

         <body MS_POSITIONING="GridLayout">

                   <form id="Form1" method="post" runat="server">

                                     <asp:textbox id="TextBox1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" Columns="60" Rows="8" TextMode="MultiLine"></asp:textbox>

                                     <asp:Label id="Label1" style="Z-INDEX: 105; LEFT: 8px; POSITION: absolute; TOP: 304px" runat="server">Label</asp:Label>

                                     <asp:checkboxlist id="CheckBoxList1" style="Z-INDEX: 104; LEFT: 544px; POSITION: absolute; TOP: 16px"

                                     runat="server"></asp:checkboxlist>

                                     <asp:button id="Button1" style="Z-INDEX: 103; LEFT: 192px; POSITION: absolute; TOP: 160px" runat="server" Text="清除空行"></asp:button>

                                     <asp:textbox id="TextBox2" style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 200px" runat="server" Columns="60" Rows="5" TextMode="MultiLine"></asp:textbox>

                            </form>

         </body>

</HTML>

 

Index.aspx.vb

Imports System

Imports System.Web

Imports System.Web.UI

Imports System.Web.UI.WebControls

Imports System.Text

Imports System.Text.RegularExpressions

Imports Microsoft

Imports Microsoft.VisualBasic

 

Public Class WebForm1

    Inherits System.Web.UI.Page

 

#Region " Web 窗体设计器生成的代码 "

 

    '该调用是 Web 窗体设计器所必需的。

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

 

    End Sub

    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox

    Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox

    Protected WithEvents Button1 As System.Web.UI.WebControls.Button

    Protected WithEvents CheckBoxList1 As System.Web.UI.WebControls.CheckBoxList

    '注意: 以下占位符声明是 Web 窗体设计器所必需的。

    '不要删除或移动它。

    Private designerPlaceholderDeclaration As System.Object

 

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init

        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的

        '不要使用代码编辑器修改它。

        InitializeComponent()

    End Sub

 

#End Region

 

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '在此处放置初始化页的用户代码

    End Sub

    '**************************************************************************

    '

    '替换回车换行和空格函数

    '

    '**************************************************************************

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim StrTB1, StrTB2 As String

 

        StrTB1 = TextBox1.Text

 

        StrTB2 = DealWithBlank(StrTB1)

 

        TextBox2.Text = StrTB2

    End Sub

 

    Function DealWithBlank(ByVal str As String) As String

 

        str = Regex.Replace(str, "^ */r/n", "", RegexOptions.Multiline)

        str = Regex.Replace(str, "/r/n *$", vbCrLf, RegexOptions.Multiline)

 

        str = Regex.Replace(str, "(/r/n){1,}", vbCrLf)

        str = Regex.Replace(str, "/r/n$", "")

 

        Return str

    End Function

End Class

以下是微信小程序的代码实现,包含一个多行文本框和一个按钮: ```html <view class="container"> <textarea class="input" bindinput="onInput">{{inputValue}}</textarea> <button class="btn" bindtap="onTap">{{btnValue}}</button> </view> ``` 在对应的JS文件中,我们需要定义多个变量来控制页面的显示: ```javascript Page({ data: { inputValue: '', // 多行文本框中的值 btnValue: '', // 按钮传递的参数 displayInput: false // 是否显示多行文本框 }, // 监听多行文本框输入事件 onInput: function(e) { // 更新多行文本框中的值 this.setData({ inputValue: e.detail.value, displayInput: true // 显示多行文本框 }); }, // 监听按钮点击事件 onTap: function() { // 如果多行文本框有值,则显示该值 if (this.data.inputValue) { wx.showToast({ title: this.data.inputValue, icon: 'none' }); } else if (this.data.btnValue) { // 如果多行文本框没有值但是按钮有参数,则显示该参数 wx.showToast({ title: this.data.btnValue, icon: 'none' }); } else { // 如果多行文本框和按钮都没有参数,则不显示任何信息 this.setData({ displayInput: false }); } } }); ``` 在CSS文件中,可以设置多行文本框和按钮的样式: ```css .container { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; } .input { width: 80%; height: 150rpx; margin-bottom: 20rpx; padding: 20rpx; border: 1rpx solid #ccc; border-radius: 5rpx; font-size: 28rpx; } .btn { width: 200rpx; height: 80rpx; border-radius: 5rpx; background-color: #4caf50; color: #fff; font-size: 32rpx; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值