Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式IsOne vs包含_Regex_Postgresql - Fatal编程技术网

Regex 正则表达式IsOne vs包含

Regex 正则表达式IsOne vs包含,regex,postgresql,Regex,Postgresql,我正在写一个PostGres检查,以便将文本字段约束为4个不同值之一。我故意避免使用Enum类型,因为已知它会导致问题 我似乎有更多的“包含”,而不是必须是其中之一 ALTER TABLE registrations ADD CONSTRAINT proper_confirmation_status CHECK (confirmation_status:: text ~* '^(Unconfirmed|Confirmed|Rejected|NotApplicable)'::text); 因

我正在写一个PostGres
检查
,以便将文本字段约束为4个不同值之一。我故意避免使用
Enum
类型,因为已知它会导致问题

我似乎有更多的“包含”,而不是必须是其中之一

ALTER TABLE registrations
  ADD CONSTRAINT proper_confirmation_status CHECK (confirmation_status::
text ~* '^(Unconfirmed|Confirmed|Rejected|NotApplicable)'::text);
因此:

  • 单词应该是这4个字符中的一个,没有任何附加字符(开始或结束)
  • 检查应区分大小写
  • 当前已正确验证
    confirmdddddd
    ,但
    confirmdsss
  • 使用
    ~
    (区分大小写)代替
    ~*
    (区分大小写)
  • 正则表达式应该是
    ^(..)$
    (匹配整个字符串)
  • 语法看起来有点奇怪,行吗

    ALTER TABLE registrations
      ADD CONSTRAINT proper_confirmation_status CHECK
        (confirmation_status::text ~ '^(Unconfirmed|Confirmed|Rejected|NotApplicable)$');
    
  • 使用
    ~
    (区分大小写)代替
    ~*
    (区分大小写)
  • 正则表达式应该是
    ^(..)$
    (匹配整个字符串)
  • 语法看起来有点奇怪,行吗

    ALTER TABLE registrations
      ADD CONSTRAINT proper_confirmation_status CHECK
        (confirmation_status::text ~ '^(Unconfirmed|Confirmed|Rejected|NotApplicable)$');
    

  • 我认为你应该在操作符中使用
    ,而不是正则表达式

    ALTER TABLE registrations
      ADD CONSTRAINT proper_confirmation_status CHECK (
        confirmation_status::text IN ('Unconfirmed', 'Confirmed', 'Rejected', 'NotApplicable'));
    

    我认为你应该在
    操作符中使用
    ,而不是正则表达式

    ALTER TABLE registrations
      ADD CONSTRAINT proper_confirmation_status CHECK (
        confirmation_status::text IN ('Unconfirmed', 'Confirmed', 'Rejected', 'NotApplicable'));
    

    如果整个字段应等于您的
    -分隔值,请使用
    ^
    $
    “^(未确认|确认|拒绝|不适用)$”
    @Wiktor Stribiż我尝试了您的建议,但失败了(见上文第3节)。我刚刚意识到postgres操作符
    ~*
    可能是它匹配/包含
    vs
    等于
    的原因。向问题添加postgres标记。
    $
    必须处理第3点OK。如果整个字段应等于您的
    分隔值,请使用
    ^
    $
    '^(未确认|确认|拒绝|不适用)$'
    @Wiktor Stribiżew我尝试了您的建议,但失败了(见上文第3节)。我刚刚意识到postgres操作符
    ~*
    可能是它匹配/包含
    vs
    等于
    的原因。将postgres标记添加到问题中。
    $
    必须已经处理了第3点OK。