ストレートな回答でなくてすみません。あなたの場合、regexpはやり過ぎかもしれません。必要に応じて、それを使用しないソリューションの方が保守性が高くなる可能性があります。
あなたがどの言語を使用しているか分からないので、ランダムに選択します。疑似コードの一部として扱うことができます。
PHP の場合:
function isValidSize($size) {
$validSizeTags = array("S", "M", "XL", "XXL");
$minimumSize = 2;
$maximumSize = 23;
if(ctype_digit(strval($size))) { // explanation for not using is_numeric/is_int below
if($size >= $minimumSize && $size <= $maxiumSize) {
return true;
}
} else if(in_array($size, $validSizeTags)) {
return true;
} else {
return false;
}
}
$size = "XS";
$isValid = isValidSize($size); // true
$size = 23;
$isValid = isValidSize($size); // true
$size = "23";
$isValid = isValidSize($size); // true, is_int would return false here
$size = 50;
$isValid = isValidSize($size); // false
$size = 15.5;
$isValid = isValidSize($size); // false, is_numeric would return true here
$size = "diadjsa";
$isValid = isValidSize($size); // false
( orctype_digit(strval($size))
の代わりに使用する理由は、最初のものは "15" のような文字列ではなく、実際の整数に対してのみ true を返すためです。2 番目のものは、整数だけでなくすべての数値に対して true を返します。ただし、を含む文字列に対しては true を返しますただし、整数の場合は false を返します。そのため、値をに送信する前に を使用して文字列に変換します。PHP の世界へようこそ。)is_int
is_numeric
ctype_digit
strval
ctype_digits
このロジックを配置すると、この特定の製品のすべての有効なサイズを格納する構成ファイルまたはデータベースから、validSizeTags、maximumSize、および minimumSize を簡単に挿入できます。正規表現を使用すると、さらに厄介になります。