Reputation: 147
I want to do the regexpr pattern matching and I couldn't. Please help.
I want to evaluate the value that is going to be inserted in DB. I want to perform a check as below.
Only four special characters and alphabeticals are allowed. other special characters are not allowed.
Four characters are .
dot, -
Hyphen '
apostrophe and space
My value will have meet below condition.
......
, ----------
, ''''''''
.For example these are valid:
ORACLE
ORA..C L--E
''..O
O--...'''
and these are invalid:
........
''''''''''
--------
ORACLE$
ORACL#E
Upvotes: 0
Views: 97
Reputation: 167842
Use the regular expression ^( +|[A-Z '.-]*[A-Z][A-Z '.-]*)$
to match a string consisting of only either:
+all space characters; or
[A-Z '.-]*[A-Z][A-Z '.-]*
Like this:
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 valid data:
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
Invalid data fails:
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
Query:
SELECT * FROM data;
Output:
| VALUE | | :----------- | | ORACLE | | ORA..C L--E | | '''..O | | O--...'''' | | |
db<>fiddle here
Upvotes: 2