gpt4 book ai didi

ruby - 在 ruby​​ 中,如何针对一组混合数据类型测试输入字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:16 24 4
gpt4 key购买 nike

我正在尝试根据必填字段和可选字段的简短列表用 ruby​​ 编写一个基本的 MARC 验证器,部分是作为用 ruby​​ 编写一些东西的练习,我不是很熟悉。

我想出了看起来像有效的 ruby​​ 代码来存储我的“可选”字段(并且脚本在启用代码时执行):

Optional = ['006', '007', '010', '020', '022', {'040' => ['c']}, '041', ['050',  '060',  '082',  '086',  /09\d/], {/1\d\d/ => ['a']}, {'240' => ['a']}, '250', {'260' => ['a',  'b',  'c']}, {'300' => ['a']}, '490', /7[0-5]\d/, '830']

根据我有限的阅读,这在技术上是可行的……但我不确定从这里该何去何从。我想遍历记录中的各个字段,如果缺少一个字段(或子字段,如果有的话),在屏幕上写一个警告:

sysnum = record['001']
record.fields.each do |field|
Optional.each do |optfield|
if field.tag =~ optfield
break
else
puts "#{sysnum} is missing #{field.tag}"
end
end
end

但是,这并不适用于我的所有情况,因为并非所有 optfield 值都是字符串。我应该使用 if block 来测试哈希值吗?正则表达式值呢?当右侧不是正则表达式(string =~ otherstring 而不是 string =~ regex)时,=~ 是否会测试为真?

我是不是找错了树?

最佳答案

您可能想使用 ===,您可以将其理解为“有点等于”。如您所料,它适用于字符串和正则表达式:

'100' === '100'
# true
/1\d\d/ === '100'
# true

对于您的阵列,您可以使用 Regexp.union它将字符串数组转换为匹配任何这些字符串的正则表达式。

关于ruby - 在 ruby​​ 中,如何针对一组混合数据类型测试输入字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30086975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com