我正在try 为以下格式创建正则表达式:
NPT-XXXXX
只允许使用字母TNP和-,并且XXXXX是数字,它最多只能接受5个数字.
以下是我目前掌握的情况:
if !(/TNP-[\d]{5,}$/.match(tc_number))
raise "Is not in the correct format, It should be NPT-XXXXX"
end
我正在try 为以下格式创建正则表达式:
NPT-XXXXX
只允许使用字母TNP和-,并且XXXXX是数字,它最多只能接受5个数字.
以下是我目前掌握的情况:
if !(/TNP-[\d]{5,}$/.match(tc_number))
raise "Is not in the correct format, It should be NPT-XXXXX"
end
您的正则表达式有两个问题.
它在开始时没有固定,所以ABC TNP-12345
会匹配.
[\d]{5,}
表示匹配at least个5位数.第TNP-123
章不匹配
此外,[]
也是不必要的.[]
用于构建任意字符类.\d
已经是等于[0-9]
的character class,不需要放在字符类中.
相反,您希望使用/^TNP-\d{1,5}$/
来表示以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