いくつかのテスト コードをセットアップし、正規表現を個別にテストすることをお勧めします (または、理想的には、単体テストをセットアップしてその方法でテストします)。
invalid = %w[777-2345 ABCD-12 ABCD-12345678 AB-12345678 ABC-1234567]
valid = %w[ABC-12345 ABCD-123 ABCD-1234 ABCD-12345 ABCD-123456]
def validate codes,regex
codes.each do |code|
if code =~ regex
puts "Valid code #{code}"
else
puts "Invalid code #{code}"
end
end
end
上記を正規表現でテストすると、いくつかの問題が発生します。あなたの説明から、正規表現に許可された文字としてスペースが含まれている理由がわかりません。コードの場合、これは有効なコードではないようです。したがって、次のような方が良いかもしれません:
/\A[A-Za-z]{3,4}-\d{3,6}\z/
一致を完全な文字列に制限し、最初の一致を 3 つまたは 4 つの英字に制限し、最後の一致を 3 ~ 6 の数字に制限します。これは、あなたの例で #### が間違いではないことを前提としています:
puts "\n\nUSING NEW REGEX"
puts "Validating valid codes"
validate valid,/\A[A-Za-z]{3,4}-\d{3,6}\z/
puts "\nValidating INVALID codes"
validate invalid,/\A[A-Za-z]{3,4}-\d{3,6}\z/