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

本文关键字:正则表达式 有效 | 更新日期: 2023-09-27 18:04:41

我有以下regexp来验证函数名:

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

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

那么你能让它工作得更好一点吗?

感谢广告

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

需要从头到尾匹配整个函数名:

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

遵循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);
}

现在这个表达式的意思是:一个字母后面跟着一个或多个字母/数字/下划线,后面跟着一个非单词字符。因此,根据设计,如果您以特殊字符开头,它不会验证的事实是正确的。

如果您希望允许_作为首字母,则更改为:

('w+)[^'w]