如何检查字符串中除字母和数字外没有其他字符?

3

这是我目前的代码,但我找不到任何代码来表明我只想包含字母和数字。我不熟悉正则表达式。现在我的代码即使包含 '#',也会忽略while循环。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    private void okBtn_Click(object sender, EventArgs e)
    {
        if(textBox1.Text.Contains(@"^[^\W_]*$"))
        {
            fm1.txtFileName = textBox1.Text;
            this.Close();
        }
        else
        {
            MessageBox.Show("Filename cannot include illegal characters.");
        }
    }
}

2
button_click 处理程序中使用 while 循环会使您的应用程序无限显示消息。使用 if 语句,如果满足条件,则简单地返回。至于条件本身,请参见下面的答案。 - Arian Motamedi
1
字母和数字采用什么正字法?比如说,希腊字母是否应该被视为字母?那文件名中合法的符号,比如“.”呢? - Eric Lippert
@EricLippert 我想现在先保持简单,只包括键盘上的26个字母和10个数字。 - liam.burns
1
不存在所谓的“the”键盘;你指的是你自己的键盘。其他人的键盘上有不同的字母。我注意到,如果你只想要a-z和0-9,那么被接受的答案是错误的;IsLetterOrDigit可以接受任何正字法中的字母和数字。 - Eric Lippert
啊,好的。谢谢你。我意识到我仍然使用了字符数组 answer,正在查看字符串中是否有任何字符与 GetInvalidPathChars 中的任何字符匹配。 - liam.burns
4个回答

5
你可以使用方法char.IsLetterOrDigit 来检查输入字符串是否仅包含字母或数字:
if (input.All(char.IsLetterOrDigit))
{
    //Only contains letters and digits
    ... 
}

谢谢,这里的“input”是什么?它会是textBox1.Text吗? - liam.burns
1
@liam.burns:是的,这只是一般性的,但你可以将其映射到你的情况中。 - cuongle
2
使用内置函数而不是正则表达式,做得很好! - Jesse Smith
谢谢你的帮助。只需要等一分钟就可以接受你的答案了 :) - liam.burns
1
如果文本长度为零怎么办? - Eric Lippert

2

在检查无效文件名时,我建议使用Path.GetInvalidPathChars方法:

char[] invalidChars = Path.GetInvalidPathChars();
if (!input.All(c => !invalidChars.Contains(c)))
{
    //invalid file name

2

这将只允许字母和数字:

^[a-zA-Z0-9]+$

请查看这个关于正则表达式的网站
如果您想使用正则表达式,可以将其放在按钮点击事件中: -请确保导入正确的命名空间 - using System.Text.RegularExpressions;
    private void okBtn_Click(object sender, EventArgs e)
    {
        Match match = Regex.Match(textBox1.Text, @"^[a-zA-Z0-9]+$");
        if (match.Success)
        {
            fm1.txtFileName = textBox1.Text;
            this.Close();
        }
        else
        {
            MessageBox.Show("Filename cannot include illegal characters.");
        }
    }

2
您可以使用这种模式:
@"^[^\W_]*$"

^$是字符串开头和结尾的锚点。

由于\w代表所有字母、数字和下划线,因此您必须从字符类中删除下划线。


这个代码之前是可以工作的,但现在它不接受任何输入,所以即使我只输入字母也无法工作。我现在会在代码顶部进行编辑。 - liam.burns
1
Liam,这是一个正则表达式模式,"contains"用于检查实际字符串。 - Sayse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接