0

我想做正则表达式模式匹配,但我做不到。请帮忙。

我想评估将要插入数据库的值。我想进行如下检查。

只允许使用四个特殊字符和字母。不允许使用其他特殊字符。

四个字符是.点、 -连字符'撇号和空格

我的价值将满足以下条件。

  • 它只包含字母。
  • 它包含字母和以上特殊字符的组合。
  • 它仅包含所有空格。
  • 除了空格之外,它不应该是简单的特殊字符,如......, ----------, ''''''''

例如,这些是有效的:

  • ORACLE
  • ORA..C L--E
  • ''..O
  • O--...'''

这些是无效的:

  • ........
  • ''''''''''
  • --------
  • ORACLE$
  • ORACL#E
4

1 回答 1

2

使用正则表达式^( +|[A-Z '.-]*[A-Z][A-Z '.-]*)$匹配仅由以下任一组成的字符串:

  • +
    所有空格字符;或者
  • [A-Z '.-]*[A-Z][A-Z '.-]*
    零个或多个字母或特殊字符,然后是一个字母字符,然后是零个或多个字母或特殊字符。

像这样:

甲骨文设置

CREATE TABLE data (
  value VARCHAR2(100),
  CONSTRAINT value__alpha_or_special_chr CHECK ( REGEXP_LIKE( value, '^( +|[A-Z ''.-]*[A-Z][A-Z ''.-]*)$' ) )
);

插入有效数据

INSERT INTO data ( value )
SELECT q'!ORACLE!'       FROM DUAL UNION ALL
SELECT q'!ORA..C  L--E!' FROM DUAL UNION ALL
SELECT q'!'''..O!'       FROM DUAL UNION ALL
SELECT q'!O--...''''!'   FROM DUAL UNION ALL
SELECT q'!     !'        FROM DUAL

无效数据失败

INSERT INTO data ( value )
SELECT q'!''''''''''!' FROM DUAL;
ORA-02290: 违反检查约束 (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR)
INSERT INTO data ( value )
SELECT q'!--------!'   FROM DUAL;
ORA-02290: 违反检查约束 (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR)
INSERT INTO data ( value )
SELECT q'!ORACLE$!'    FROM DUAL;
ORA-02290: 违反检查约束 (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR)
INSERT INTO data ( value )
SELECT q'!ORACL#E!'    FROM DUAL;
ORA-02290: 违反检查约束 (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR)

查询

SELECT * FROM data;

输出

| 价值 |
| :----------- |
| 甲骨文 |
| ORA..C L--E |
| '''..O |
| O--...'''' |
| |

db<>在这里摆弄

于 2019-02-18T10:39:05.193 回答