Techioz Blog

文字と数字の組み合わせを含む正規表現

概要

形式の正規表現を作成しようとしています:

TNP-XXXXX

文字 TNP と - のみが許可され、XXXXX は数字であり、最大 5 つの数字のみを受け入れることができます。

私がこれまでに持っているものは次のとおりです。

if !(/TNP-[\d]{5,}$/.match(tc_number))
   raise "Is not in the correct format, It should be TNP-XXXXX"
end

解決策

正規表現には 2 つの問題があります。

また、[]も不要です。 [] は任意の文字クラスを構築するためのものです。 すでに [0-9] と同等の文字クラスであるため、文字クラス内に置く必要はありません。

代わりに、/^TNP-$/ で、TNP- で始まる 1 ~ 5 桁の文字列を示すようにします。

tests = ["ABC TNP-12345", "TNP-12345", "TNP-123", "TNP-", "TNP-ABC", "ABC-12345", "TNC-123456"]
tests.each do |test|
  puts "#{test} - #{/^TNP-[\d]{1,5}$/.match?(test)}"
end
ABC TNP-12345 - false
TNP-12345 - true
TNP-123 - true
TNP- - false
TNP-ABC - false
ABC-12345 - false
TNC-123456 - false