Kuidas kontrollida regulaaravaldisega, et string tohib sisaldada ainult numbreid ning suurtähti (A-Z)?

Postitas Erki Eessaar
Järgnevaid lauseid tuleb käivitada PostgreSQLi andmebaasisüsteemis. Soovi korral saate näiteks kasutada DB Fiddle keskkonda.

Katsetus 1

Regulaaravaldis: '[A-Z0-9]+'

Kuidas kontrollida seda regulaaravaldist PostgreSQLis?

SELECT 'EST?12'~'[A-Z0-9]+' AS tulemus;

ja

SELECT 'est12'~'[A-Z0-9]+' AS tulemus;

annavad mõlemad tulemuseks TRUE, sest kontrollitakse, et stringis sisalduks vähemalt üks märk (seda näitab +), mis kuulub märkide klassi [A-Z0-9].

Seega see regulaaravaldis seda ülesannet ei lahenda.

Katsetus 2

Regulaaravaldis: '^[A-Z0-9]+$'

^ tähendab stringi algust
$ tähendab stringi lõppu
Stringi alguse ja lõpu vahel tohivad olla vaid märkide klassi kuuluvad märgid.

Kuidas kontrollida seda regulaaravaldist PostgreSQLis?

SELECT 'EST?12'~'^[A-Z0-9]+$' AS tulemus;

ja

SELECT 'est12'~'^[A-Z0-9]+$' AS tulemus;

annavad mõlemad tulemuseks FALSE.

SELECT 'EST12'~'^[A-Z0-9]+$' AS tulemus;

ja

SELECT 'est12'~*'^[A-Z0-9]+$' AS tulemus;

annavad mõlemad tulemuseks TRUE.

SELECT 'est12'~*'^[A-Z0-9]+$' AS tulemus;

tulemuseks on TRUE, sest ~* operaator teostab tõstutundetut vastavuse kontrolli.

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!