我有以下正则表达式来验证函数名称:
([a-zA-Z]\w+)[^\w]
这个正则表达式能够避免使用除下划线之外的特殊字符,但如果我们在开头放置特殊字符,则此表达式无法验证。
那么你能让它更好地工作吗?
感谢adv
答案 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]