有效签名名称的正则表达式
本文关键字:正则表达式 有效 | 更新日期: 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]