RegEx只允许有效的Enum成员名
本文关键字:Enum 成员 有效 许有效 RegEx | 更新日期: 2023-09-27 18:14:42
我以前从未使用过RegEx,但是今天出现了对它的需求。
我需要查看传入函数的字符串是否是有效的Enum成员名。在我的脑海中,这意味着它不能包含符号(除了"_"),也不能以字母开头。现在我可以谷歌一下,自己弄清楚,但我不太确定这两个规则是否是enum成员名的唯一规则——在网上找不到任何关于它的信息。
编辑:添加一些信息…我正在为unity3d编写一个编辑器插件。用户可以填充一个字符串列表,脚本将用这些字符串作为枚举成员生成一个c#文件。然后,用户可以通过代码引用枚举值。生成的枚举基本上是用户指定的id列表,因此在代码中他可以键入idum。SomeUserDefinedMember
这个正则表达式应该确保枚举值
的名称是有效的^[a-zA-Z_][a-zA-Z_0-9]*
(免责声明:我从未测试过这样的解决方案,这只是一个想法)
要处理所有可能的值,您可以使用c#编译器直接在运行中生成带有您的值的枚举。如果编译失败,则枚举的值无效。
你可以试试下面这个问题的代码:
CodeTypeDeclaration type = new CodeTypeDeclaration("BugTracker");
type.IsEnum = true;
foreach (var valueName in new string[] { "Bugzilla", "Redmine" })
{
// Creates the enum member
CodeMemberField f = new CodeMemberField("BugTracker", valueName);
type.Members.Add(f);
}
OldAnswser,在理解您的需求之前:
我不认为使用RegEx是正确的方式。
你想做的事情可以像这样编码:
enum MyEnum {
Val1,
Val2,
Val3
}
class MyClass {
void Foo(){
string someInput = "Val2";
MyEnum candidate;
if(Enum.TryParse(someInput, out candidate)){
// DO something with the enum
DoSomething(candidate);
}
else{
throw new VeryBadThingsHappened("someInput is not a valid MyEnum");
}
}
}
为每个枚举类型构建regex:
Type enumeration = ...;
var regex = enumeration.Name + "'.(" + string.Join("|", Enum.GetNames(enumeration)) + ")";
应该匹配给定枚举的所有值。您还可以将其展开以匹配多个enum类型。