我正在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

推荐答案

您的正则表达式有两个问题.

  1. 它在开始时没有固定,所以ABC TNP-12345会匹配.

  2. [\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

Ruby-on-rails相关问答推荐

如何控制或定制S为模型使用的命名路由Rail()?

本地主机的上衣配置

Heroku、Selenium、Chome和Chromedriver的复杂问题(抱歉,无法简单描述,请阅读详细信息)

如何在 JR gem 中指定每个资源的最大页面大小配置

根据表单内的 Select 字段值渲染部分内容

我的 Ruby on Rails Web API 的 Docker 映像未在服务器上构建,因为它未与 ruby​​gems.org 连接

如何从数组中提取值

Ruby:如何通过谓词将一个集合拆分为 ruby​​ 中的两个集合?

blueprint/screen.css 未预编译

简单表单关联自定义标签名称

如何在 rspec 中运行单个测试?

了解 Rails 验证:allow_blank 有什么作用?

Rails data-disable-with re-enable 按钮

如何在 Rails 中验证日期以使其在今天之后?

在 factory_girl 中填充与 children 的关联

Rails 中是否有 HTML 安全截断方法?

如何在 Ruby 中搜索数组?

Dotenv 多行变量

扩展 Devise SessionsController 以使用 JSON 进行身份验证

Rails:在 link_to 中保留 GET 查询字符串参数