【问题标题】:Regular Expression Equivalent for other data types used for Data Validation用于数据验证的其他数据类型的正则表达式等效项
【发布时间】:2012-09-21 20:02:42
【问题描述】:

我正在为数据库创建一个数据质量框架,该框架查看每种数据类型的单个单元格,并查看它们的值是否可接受。

对于数据类型字符串: 我只是用一个正则表达式来定义什么是有效的

对于其他数据类型(Integer、Timestamp、Boolean、TimeDelta、Float、...): 我没有任何记录有效内容的标准方法

对于其他数据类型是否有与正则表达式等效的方法?像 IntegerRegEx 的? 例如,假设我有一个字段必须包含 0 到 65535 之间的数字,或者我有一个只能包含奇数的字段...

如果这个 IntegerRegEx 也是一个字符串(就像普通的 RegEx 一样)那就太好了,这样我就可以将 IntRegEx 和 StringRegEx 存储在同一个表中。

提前致谢!

【问题讨论】:

    标签: regex validation data-quality


    【解决方案1】:

    如果你想要一个字符串和类似正则表达式的东西,你可以只使用正则表达式。只需有一种将每种类型转换为字符串的标准方法,然后针对字符串形式编写正则表达式。这对某些人来说可能很尴尬,对另一些人来说很容易出错,但它很简单,不涉及创建自己的表达式语言或直接从数据库加载代码并对其进行评估。

    【讨论】:

    • 您的解决方案对我的目的并不真正有效,因为逻辑性和不易出错性非常重要。尽管如此,还是感谢您的意见!
    • 我认为,总的来说,这是一个更有趣的问题,而且没有现成的解决方案,这很令人惊讶
    【解决方案2】:

    我想根据您使用的编程语言(例如 PHP),您可以存储数学表达式(字符串),例如 $x >= 0 && $x <= 65535$x % 2 == 1

    使用正则表达式,你会写这样的东西,对吧?

    if (!preg_match($regexFromDb, $fieldValueFromDb)) {
        // validation fails
    }
    

    所以对于数学表达式,你会做同样的事情,例如

    $x = $fieldValueFromDb;
    if (!eval("return $mathExprFromDb")) {
        // validation fails
    }
    

    这只是示例代码。当然,您应该保护您的代码免受运行任意存储的可执行代码的危险,以及防止乱码表达式使您的脚本崩溃。

    我认为这是您将要获得的最接近的结果,因为您寻找的“IntegerRegEx”已经有了一个名字......数学。 ;)

    【讨论】:

    • lol @ Math- 好点,这都可以存储为可以评估的字符串-这是我迄今为止最好的主意。我认为由于整数匹配的复杂性,除了可评估的字符串之外,可能没有标准的方法来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多