有效签名名称的正则表达式

时间:2011-08-05 11:39:12

标签: c# regex

我有以下正则表达式来验证函数名称:

([a-zA-Z]\w+)[^\w]

这个正则表达式能够避免使用除下划线之外的特殊字符,但如果我们在开头放置特殊字符,则此表达式无法验证。

那么你能让它更好地工作吗?

感谢adv

3 个答案:

答案 0 :(得分:4)

您需要匹配整个函数名称的开头到结尾:

^([a-zA-Z]\w+)[^\w]$

答案 1 :(得分:0)

遵循C#语言规范:

http://msdn.microsoft.com/en-us/library/aa664670(VS.71).aspx

以下正则表达式将处理'_'和'@'的特殊情况,并验证非ASCII字母,即验证unicode标识符。

[Test]
public void ValidateIdentifiers()
{
  Regex regex = new Regex(
  @"^@?_*[\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Nl}\p{Mn}\p{Mc}\p{Cf}\p{Pc}\p{Lm}]*$");

  Assert.That(regex.IsMatch("Bling"),   Is.True);
  Assert.That(regex.IsMatch("@_Bling"), Is.True);
  Assert.That(regex.IsMatch("_Bling"), Is.True);
  Assert.That(regex.IsMatch("__Bling"), Is.True);
  Assert.That(regex.IsMatch("_Bling_Bling"), Is.True);
  Assert.That(regex.IsMatch("السياحى"), Is.True);
  Assert.That(regex.IsMatch("_@Bling"), Is.False);
}

答案 2 :(得分:-1)

现在表达的意思是:一个字母后跟一个或多个字母/数字/下划线,后跟一个非单词字符。因此,通过设计,如果你从一个特殊字符开始就无法验证的事实是正确的。

如果您想允许_作为第一个字母,请更改为:

(\w+)[^\w]