是否可以仅使用正则表达式来限制字符串中特定字符的出现次数?
例如,我想将字符串中$
或%
或space
的出现次数限制为最多5次出现。
这可能吗?
答案 0 :(得分:5)
答案 1 :(得分:4)
通常,您必须将问题分为两个不同的方面:
$
字符的出现次数不大于5)要解决1.问题,您当然可以使用正则表达式。例如,正则表达式\d{6,}
可以检查是否有6位或更多位数。
要解决2.问题,C#没有通用的方法。简单地说,必然会有某些东西迫使这些限制。最简单的方法是创建具有检查设置约束的属性的类(因此它是强制约束的属性):
public class SomeTestClass
{
private string text;
public string Text
{
get
{
return text;
}
set
{
CheckConstraints(value, "Text");
text = value;
}
}
private void CheckConstraints(string value, string param)
{
if (Regex.IsMatch(value, @"\d{6,}"))
{
throw new ArgumentException("Argument do not match the constraint", param);
}
}
}
由于text
是私有的,因此没有其他方法来设置它而不是属性,它会检查您的约束。这当然可以进一步改进,例如通过创建一组可重用的规则等。
如果有其他对象管理您的类 - 例如管理数据实体的某些数据提供程序,您可以使用属性方法。