简体   繁体   中英

ORA-12728: invalid range in regular expression

I want to check if valid phone number is inserting in table, so my trigger code is here:

 select start_index
              into mob_index
              from gmarg_mobile_operators
              where START_INDEX = substr(:new.contact_info,0,3);

              if (REGEXP_LIKE (:NEW.CONTACT_INFO,'^(?:'|| mob_index ||')[\-,\:]{0,1}[0-9][0-9][\-,\:]{0,1}[0-9][0-9][\-,\:]{0,1}[0-9][0-9]')) then
                found := 1;
              end if;

I've checked my regex: "^(?:555)[-,:]{0,1}[0-9][0-9][-,:]{0,1}[0-9][0-9][-,:]{0,1}[0-9][0-9]" on several online tools and it is correct.

When I run my trigger, it compiles successfully, but during inserting a row following error is shown:

 insert into GMARG_CONTACTS
(CLINET_ID,CONTACT_INFO,contact_type_id)
values
(0,'555194117','Mobile')
Error report -
SQL Error: ORA-12728: invalid range in regular expression
ORA-06512: at "HR.GMARG_TRIGGER_CONTACT", line 12
ORA-04088: error during execution of trigger 'HR.GMARG_TRIGGER_CONTACT'
12728. 00000 -  "invalid range in regular expression"
*Cause:    An invalid range was found in the regular expression.
*Action:   Ensure a valid range is being used.

So, if my regex is correct, why does oracle shows error? I tried to find answer, or redifine my regex, but no forward steps... thank you in advance

Regexp don't use \\ to protect - in a bracket expression . You only have to put - as the first character, just after the opening bracket:

IF REGEXP_LIKE('--,,::', '[\-,:]*')
...

=> ORA-12728: invalid range in regular expression

If you're curious, when encountering [\\-,:] Oracle understand: "any character in the range from \\ to , or the character : " . The reason why this raises an exception is \\ appears to be after , according to their ASCII value. And Oracle don't accept range having a starting value after the ending one.

On the other hand:

 IF REGEXP_LIKE('--,,::', '[-,:]*')

Works as expected.


As a side note, [-,:]{0,1} meaning "zero or one occurrence of - or , or : " could be written [-,:]? .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM