Office中国论坛/Access中国论坛

标题: 禁止用户在某文本框内输入特殊字符 [打印本页]

作者: Charline    时间: 2015-11-23 21:51
标题: 禁止用户在某文本框内输入特殊字符
麻烦请问一下各位,在窗体上有一个文本框,用户可以自由输入内容,但是这个文本框里的字符会作为文件名,如果用户输入的内容还有非法文件名字符,在生成文件的时候就会报错。

所以想请问一下怎么能实现在用户输入完成之后,检测输入内容里是否还有非法特殊字符呢?如果有则弹出消息框提示。

谢谢。
作者: layaman_999    时间: 2015-11-23 23:16
select case 文本框
  case "*","/" 等等
   msgbox "您输入内容不合法,嘻嘻“
   文本框.Undo
end select
作者: layaman_999    时间: 2015-11-23 23:17
在稳步框的BeforeUpdate更新前事件中放入
作者: Charline    时间: 2015-11-24 00:08
自己在网上找到了,自己回答自己的问题真是太悲惨了。。。。。。

文本框的名字叫Title,代码写在更新事件里。乃萌自己试试吧,不要问我为什么,我就是改改能用的人.....


Private Sub Title_AfterUpdate()
   
    If Not IsNull(Title.Value) Then

        Dim SpecielCharToSearch As String
        Dim CtrlErrTitre As Long
        Dim SpecCharExist As Boolean
        Dim i As Integer

        SpecCharExist = False

        CarToSearch = "`~.&~#|\^@£$%*!/:;?><µ°²§¨¤," & Chr(34)
        For i = 1 To Len(SpecielCharToSearch)
            CtrlErrTitre = InStr(Titre.Value, Mid(SpecielCharToSearch, i, 1))
            '挨个查找定义的特殊字符是否存在于文本框内,如果存在则返回此字符串的位置,如果不存在则返回0
            If CtrlErrTitre <> 0 Then
                SpecCharExist = True
            End If
        Next i
        If SpecCharExist = True Then
            MsgBox "标题不能包含以下特殊字符: " & Chr(34) & ".&~#|\^@£$%*!/:;?><µ" & Chr(34) & "。请重新输入。", vbExclamation + vbOKOnly, "禁止输入特殊字符"
            Title.Value = Null
            Titre.SetFocus
        End If
    End If
     
End Sub
作者: admin    时间: 2015-11-24 08:27
1.更新后事件
2.直接弹出保存文件对话框。
作者: roych    时间: 2015-11-24 10:25
我一般会在提交时再统一检测,不符合的再提示。
另外,如果不嫌复杂,用正则表达式效率会更高一些。
这个大概就是person童鞋吧?
作者: todaynew    时间: 2015-11-24 11:14
Charline 发表于 2015-11-24 00:08
自己在网上找到了,自己回答自己的问题真是太悲惨了。。。。。。

文本框的名字叫Title,代码写在更新事 ...

写成函数返回逻辑值,将该还是用于有效性规则属性。
作者: 风中漫步    时间: 2015-11-24 11:26
小猴猴老伤心了
作者: Charline    时间: 2015-11-24 15:10
roych 发表于 2015-11-24 10:25
我一般会在提交时再统一检测,不符合的再提示。
另外,如果不嫌复杂,用正则表达式效率会更高一些。
这个 ...

正是是洒家!

正则表达式是啥?望阁下不吝赐教!
作者: roych    时间: 2015-11-24 15:47
本帖最后由 roych 于 2015-11-24 15:55 编辑
Charline 发表于 2015-11-24 15:10
正是是洒家!

正则表达式是啥?望阁下不吝赐教!

试试这个:
引用Microsoft VBScript Regular Expressions 5.5
  1. Function GetReg(ByVal strSource As String) As Boolean
  2.     Dim reg As New RegExp
  3.     Dim strPattern As String
  4.     strPattern = "[`~\.&~#\|\^@£\$%\*!/:;?><μ°§¨¤,""]"
  5.     reg.Pattern = strPattern
  6.     GetReg = reg.test(strSource)
  7. End Function
复制代码
[attach]57498[/attach]值得注意的是,部分属于正则表达式的特殊字符,需要使用反斜杠【\】进行转义。例如:匹配点号【.】,应使用【\.】
引用方法:在button的click事件里输入:
if GetReg(me.text0) then
msgbox "您输入了特殊字符,请重新输入"
me.text0=""
me.text0.setfocus
end if




作者: Charline    时间: 2015-11-24 16:22
roych 发表于 2015-11-24 15:47
试试这个:
引用Microsoft VBScript Regular Expressions 5.5
值得注意的是,部分属于正则表达式的特殊 ...

测试成功!!

虽然洒家不知道程序写了什么,但是十分好用~哈哈哈哈哈哈哈哈

拜谢R神!

--------------------------------------------------------------------------------------------------------
0_o 我整个傻眼了....

感受到了测试字段的怨念.....

洒家真的寄了,要是十二月还没收到洒家再寄一封!!!
作者: todaynew    时间: 2015-11-24 17:07
本帖最后由 todaynew 于 2015-11-24 17:10 编辑

最简单的方案是在更改事件中处理,假设你有一个文本框名曰Text0,则下以下代码:
Private Sub Text0_Change()
    Dim char As String
    char = Right(Me.Text0.Text, 1)
    If CharExist(char) = True Then
        Me.Text0.Text = Replace(Me.Text0.Text, char, "")
    End If
    Me.Text0.SelStart = Len(Nz(Me.Text0.Text, "0"))
End Sub

Function CharExist(char As String) As Boolean
    Dim str As String
    str = "`~.&~#|\^@£$%*!/:;?><μ°§¨¤," & Chr(34)
    CharExist = InStr(str, char) > 0
End Function

这样就无需跳出任何提示,也不会输入非法字符了。

作者: Charline    时间: 2015-11-24 17:26
todaynew 发表于 2015-11-24 17:07
最简单的方案是在更改事件中处理,假设你有一个文本框名曰Text0,则下以下代码:
Private Sub Text0_Chang ...

哇噢噢~这个方法也好厉害!!


感谢大师!学习了!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3