文字列を検証する正規表現を探しています。文字列は
- 長さは6〜25文字です(任意の文字を使用できます)
- 3桁を超えない
これはどのように行うことができますか?
これは、先読みアサーションで実現できます。
^(?=(?:\D*\d){0,3}\D*$).{6,25}$
説明:
^ # Start of string
(?= # Assert that the following can be matched here:
(?:\D*\d) # Any number of non-digits, followed by one digit
{0,3} # (zero to three times)
\D* # followed by only non-digits
$ # until the end of the string
) # (End of lookahead)
.{6,25} # Match 6 to 25 characters (any characters except newlines)
$ # End of string
3桁を超える文字列と長さの要件に準拠していない文字列のみを除外する必要があるようです。
どちらも正規表現を必要とせず、実際には、数字が分散している可能性があるため、一致する正規表現を構築するのは困難です。
"a string".Length
文字数の確認に使用します。
文字を反復処理しchar.IsDigit
、桁数を確認するために使用します。
public bool IsValid(string myString)
{
if (myString.Length < 6 || myString.Length > 25)
return false;
int digitCount = 0;
foreach(var ch in myString)
{
if(char.IsDigit(ch))
digitCount;
}
return digitCount < 4;
}