【问题标题】:How do I check that a string doesn't include any characters other than letters and numbers?如何检查字符串不包含除字母和数字以外的任何字符?
【发布时间】:2013-07-24 16:39:55
【问题描述】:

这是我到目前为止所拥有的,但我在任何地方都找不到代码说我只想包含字母和数字。我不熟悉正则表达式。现在,即使我包含“#”,我的代码也会忽略 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.");
        }
    }
}

【问题讨论】:

  • button_click 处理程序中使用while 循环会使您的应用程序无限显示消息。使用if 语句并在满足条件时简单地返回。至于条件本身,请参阅下面的答案。
  • 字母和数字用什么正字法?例如,希腊语中的字母是否被视为字母?文件名中合法的符号怎么样,比如“。” ?
  • @EricLippert 我想我现在就让它保持简单,所以只有键盘上的 26 个字母和 10 个数字。
  • 没有“the”键盘之类的东西;你的意思是在你的键盘上。其他人的键盘上有不同的字母。我注意到,如果您只想要 a-z 和 0-9,那么接受的答案是错误的; IsLetterOrDigit 接受任何正字法中的字母和数字。
  • 啊,对。谢谢你。我意识到无论如何我都使用了 char 数组答案,查看字符串中的任何字符是否与 GetInvalidPathChars 中的任何字符匹配

标签: c# regex string validation


【解决方案1】:

您可以使用char.IsLetterOrDigit方法来检查输入字符串是否只包含字母或数字:

if (input.All(char.IsLetterOrDigit))
{
    //Only contains letters and digits
    ... 
}

【讨论】:

  • 谢谢,这里的“输入”是什么?会是 textBox1.Text 吗?
  • @liam.burns:是的,这只是一般情况,但您可以映射到您的案例中
  • 使用内置而不是正则表达式做得很好!
  • 感谢您的帮助。只需稍等片刻即可接受您的回答 :)
  • 文本长度为零怎么办?
【解决方案2】:

当您检查无效文件名时,我会改用 Path.GetInvalidPathChars

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

【讨论】:

    【解决方案3】:

    你可以使用这个模式:

    @"^[^\W_]*$"
    

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

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

    【讨论】:

    • 除此之外它不会占用任何东西,所以即使我只包含字母它也不起作用。我现在将在顶部编辑我的代码。
    • liam,这是一个正则表达式模式,“包含”检查实际字符串
    【解决方案4】:

    这将只允许字母和数字:

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

    检查这个website所有关于正则表达式的信息。

    如果你想使用正则表达式,你可以把它放在你的按钮点击事件中: - 一定要导入正确的命名空间 - 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.");
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2016-01-26
      • 2012-02-22
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      相关资源
      最近更新 更多