REGEXP Шаблон соответствия - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу выполнить сопоставление с образцом регулярного выражения, но не смог.Пожалуйста, помогите.

Я хочу оценить значение, которое будет вставлено в БД.Я хочу выполнить проверку, как показано ниже.

Допускаются только четыре специальных символа и алфавит.другие специальные символы недопустимы.

Четыре символа: . точка, - Дефис ' апостроф и пробел

Мое значение будет соответствовать приведенному ниже условию.

  • Содержит только алфавиты.
  • Содержит комбинацию алфавитов и специальных символов.
  • содержит только все пробелы.
  • За исключением пробеловне должно быть просто специальными символами, такими как ......, ----------, ''''''''.

Например, они действительны:

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

и они недействительны:

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

1 Ответ

0 голосов
/ 18 февраля 2019

Используйте регулярное выражение ^( +|[A-Z '.-]*[A-Z][A-Z '.-]*)$ для сопоставления строки, состоящей только из:

  •  +
    всех пробелов;или
  • [A-Z '.-]*[A-Z][A-Z '.-]*ноль или более алфавитных или специальных символов, затем один алфавитный символ, а затем ноль или более алфавитных или специальных символов.

Примерно так:

Oracle Setup :

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: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated
INSERT INTO data ( value )
SELECT q'!--------!'   FROM DUAL;
ORA-02290: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated
INSERT INTO data ( value )
SELECT q'!ORACLE$!'    FROM DUAL;
ORA-02290: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated
INSERT INTO data ( value )
SELECT q'!ORACL#E!'    FROM DUAL;
ORA-02290: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated

Запрос :

SELECT * FROM data;

Вывод :

| VALUE        |
| :----------- |
| ORACLE       |
| ORA..C  L--E |
| '''..O       |
| O--...''''   |
|              |

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...