当前位置:  开发笔记 > 编程语言 > 正文

C#中是否有方法来检查字符串是否是有效的标识符

如何解决《C#中是否有方法来检查字符串是否是有效的标识符》经验,为你挑选了3个好方法。

在Java中,有所谓的方法isJavaIdentifierStartisJavaIdentifierPart对可用于判断一个字符串是一个有效的Java标识,像这样的字符类别:

public boolean isJavaIdentifier(String s) {
  int n = s.length();
  if (n==0) return false;
  if (!Character.isJavaIdentifierStart(s.charAt(0)))
      return false;
  for (int i = 1; i < n; i++)
      if (!Character.isJavaIdentifierPart(s.charAt(i)))
          return false;
  return true;
}

C#有这样的东西吗?



1> Mark Byers..:

是:

// using System.CodeDom.Compiler;
CodeDomProvider provider = CodeDomProvider.CreateProvider("C#");
if (provider.IsValidIdentifier (YOUR_VARIABLE_NAME)) {
      // Valid
} else {
      // Not valid
}

从这里:如何确定字符串是否是有效的变量名称?



2> Scott Wisnie..:

我会对这里提供的其他解决方案保持警惕.调用CodeDomProvider.CreateProvider需要查找和解析Machine.Config文件以及app.config文件.这可能比检查你自己的弦所需的时间慢几倍.

相反,我会主张你做出以下改变之一:

    将提供程序缓存在静态变量中.

    这将使您仅创建一次创建它,但它会减慢类型加载速度.

    通过创建自己的Microsoft.CSharp.CSharpCodeProvider实例直接创建提供程序

    这将跳过配置文件一起解析.

    编写代码来实现检查你自己.

    如果这样做,您可以最大程度地控制其实施方式,如果需要,可以帮助您优化性能.有关C#标识符的完整词法语法,请参阅C#语言规范的 2.2.4节.



3> ICR..:

基本上是这样的:

const string start = @"(\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl})";
const string extend = @"(\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\p{Cf})";
Regex ident = new Regex(string.Format("{0}({0}|{1})*", start, extend));
s = s.Normalize();
return ident.IsMatch(s);


OMG 7 upvotes,它甚至没有工作,甚至在我修复代码之前都没有编译...
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有