正则表达式:排除所有非字母字符

3
我是一名正则表达式新手,希望你能帮助我:我需要一个只匹配字母和数字的正则表达式,排除标点符号、非 ASCII 字符和空格。
"ilikestackoverflow2012" 是有效字符串。
"f### you °§è" 不是有效的。
"hello world" 不是有效的。
"hello-world" 和 "*hello_world*" 也不是有效的。
我需要它来使可能复杂的商业名称更适合 URL。
提前感谢!

1
听起来对于你的应用程序而言,你不仅想要一个正则表达式来告诉你输入是否匹配,而且你想要过滤输入并获得更友好的输出? - Andre Miller
7个回答

2

要验证一个字符串,您可以使用以下正则表达式和Regex.IsMatch

"^[0-9A-Za-z]+$"

解释:

  • ^ 是字符串的开头锚点
  • [...] 是一个字符类
  • + 表示一个或多个。
  • $ 是字符串的结尾锚点。

我需要将商业名称转换为URL友好型,这可能很复杂。

那么你需要替换不匹配的字符。使用以下正则表达式的 Regex.Replace

"[^0-9A-Za-z]+"

说明:

  • [^...] 是一个否定字符类。

代码:

string result = Regex.Replace(input, "[^0-9A-Za-z]+" , "");

在线演示: ideone


请注意,不同的商业名称可能会产生相同的结果字符串。例如,仅包含中文字符的商家将全部生成空字符串。


2
^[0-9a-zA-Z]+$

匹配一个或多个字母数字字符,不包含空格或非字母数字字符。


2

对于这个问题,您不需要使用正则表达式。

string s = "......"
var isValid = s.All(Char.IsLetterOrDigit);

我需要将可能复杂的业务名称转换为友好的URL。 您还可以使用HttpUtility.UrlEncode
var urlFriendlyString = HttpUtility.UrlEncode(yourString);

他可能正在使用一个RegularExpressionValidator。 - Jaime Torres

2
您可以使用以下正则表达式: ^[a-zA-Z0-9]+$ 该正则表达式仅匹配字母和数字,不允许出现其他字符。

谢谢!我忘记了那个。已经更正了答案。 - Vaman Kulkarni

1

试试这个:

var regex = new Regex(@"^[a-zA-Z0-9]+$");
var test = new[] {"ilikestack", "hello world", "hello-world", "###"};

foreach (var s in test)
   Console.WriteLine("{0}: {1}", s, regex.IsMatch(s));

编辑:如果你想要像@Andre_Miller所说的那样,你应该使用相同的正则表达式和Regex.Replace()函数。

Regex.Replace(s, @"[^a-zA-Z0-9]+", "")

或者

var regex = new Regex(@"^[a-zA-Z0-9]+$");
regex.Replace("input-string-@#$@#");

这篇文章帮助了我比我想象的还要多。这正是我需要做的。 - Valerio

1

1

[:alnum:]有什么问题吗?它是一个posix标准。因此,您的整个正则表达式应为:^[:alnum:]+$

正则表达式维基百科文章包括许多示例和详细信息。


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