正则表达式来排除所有字符,除了字母

问题描述:

我是一个真正的正则表达式的n00b,所以我问你的帮助: 我需要一个正则表达式匹配巫仅字母和数字,不包括punctations,非ASCII字符和空格。正则表达式来排除所有字符,除了字母

“ilike*2012”将是一个有效的字符串。

f ###你的”无效。

世界你好” 无效

你好世界” 和 “*程序hello_world *” 无效

等。

我需要它做一个可能的复杂的业务名称URL友好。

在此先感谢!

+1

这听起来好像您的应用程序,你不只是想要一个正则表达式来告诉你,如果输入的匹配与否,而是你要过滤的输入和得到的东西那更友善? – 2012-07-13 14:24:15

试试这个:

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]+", "") 

OR

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

这篇文章帮助我比我问的更多。这正是我必须要做的。 – Valerio 2012-07-13 14:33:43

尝试

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

www.regexr.com是一个很好的资源。

+0

谢谢你的链接! – Valerio 2012-07-13 14:32:56

以验证字符串,您可以使用下面的正则表达式与Regex.IsMatch

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

说明:

  • ^是字符串anchor的开始。
  • [...]character class
  • +表示一个或多个。
  • $是串锚的端部。

我需要它做一个可能的复杂的业务名称URL友好

然后要更换不匹配的字符。使用Regex.Replace与以下正则表达式:

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

说明:

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

代码:

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

看到它联机工作:ideone


注意,不同的企业名称可以给同一个结果字符串。例如,名称只包含中文字符的企业将全部提供空字符串。

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

匹配一个或多个不带空格或非alpha字符的字母数字字符。

+0

宾果!谢谢! – Valerio 2012-07-13 14:32:31

你可以使用下面的正则表达式。

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

+1

\ w通常匹配'_'。 – 2012-07-13 14:24:47

+0

谢谢!我错过了。更正了答案。 – 2012-07-13 14:27:29

+0

谢谢!我不知道。 – 2012-07-13 14:37:21

这有什么错[:alnum:]?这是一个posix标准。所以你的整个正则表达式是:^[:alnum:]+$

wikipedia article for regular expressions包含大量的例子和细节。

你不需要这样的正则表达式。

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

-

我需要它做一个可能的复杂的业务名称URL友好

您还可以使用HttpUtility.UrlEncode

var urlFriendlyString = HttpUtility.UrlEncode(yourString); 
+0

他可以使用RegularExpressionValidator – 2012-07-13 14:25:32