如何实现字符串合法值过滤函数 避免复杂if/case条件判断
字符串合法值校验功能实现
核心逻辑
无需编写复杂的if/case判断语句,直接利用编程语言自带的集合成员判断能力即可实现需求。
不同语言实现示例
Ruby(完全匹配你给出的调用语法)
你给出的调用风格为字符串实例直接调用方法,Ruby原生支持给String类扩展实例方法:
# 给String类新增校验方法 class String def check_allowed(allowed_list) allowed_list.include?(self) ? self : nil end end
调用测试结果:
'test1'.check_allowed(['test1', 'test2', 'test3']) # => "test1" 'test2'.check_allowed(['test1', 'test2', 'test3']) # => "test2" 'test5'.check_allowed(['test1', 'test2', 'test3']) # => nil
如果不想污染全局String类,可以使用更安全的refinements方案:
module StringValidateExtension refine String do def check_allowed(allowed_list) allowed_list.include?(self) ? self : nil end end end # 在需要使用该方法的文件/作用域内引入即可 using StringValidateExtension
Python 实现
如果不想扩展原生字符串类,可以直接写独立工具函数:
def check_allowed(input_str: str, allowed_list: list) -> str | None: return input_str if input_str in allowed_list else None
调用测试结果:
check_allowed('test1', ['test1', 'test2', 'test3']) # 返回 'test1' check_allowed('test5', ['test1', 'test2', 'test3']) # 返回 None
如果要实现字符串直接调用的效果,可以扩展字符串类:
class ValidateStr(str): def check_allowed(self, allowed_list: list) -> str | None: return self if self in allowed_list else None # 调用测试 ValidateStr('test1').check_allowed(['test1', 'test2', 'test3']) # 返回 'test1'
JavaScript 实现
// 给String原型加方法 String.prototype.checkAllowed = function(allowedList) { return allowedList.includes(this) ? this.toString() : null }
调用测试结果:
'test1'.checkAllowed(['test1', 'test2', 'test3']) // 返回 'test1' 'test5'.checkAllowed(['test1', 'test2', 'test3']) // 返回 null
内容的提问来源于stack exchange,提问作者sssebaaa
相关产品推荐
相关产品推荐

