permitted := vector('a', 'b', 'c'); strict := vector('page', '^\d+$', 'offset', '^\d+$', 'q', '^[A-Za-z0-9 ]+$', 'referrer', 'IRI', 'url', '^https?://([^/]+\.)?openlinksw.com/' )
Various test-cases follow
URL=/inclusion-engine/paramvalidation.vsp
. Expecting
1 1
URL=/inclusion-engine/paramvalidation.vsp?
. Expecting
1 1
URL=/inclusion-engine/paramvalidation.vsp?a
. Expecting
1 0
URL=/inclusion-engine/paramvalidation.vsp?a=1
. Expecting
1 0
URL=/inclusion-engine/paramvalidation.vsp?a=apple&b=banana&c=coconut
. Expecting
1 0
URL=/inclusion-engine/paramvalidation.vsp?page
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?page=1
. Expecting
0 1
URL=/inclusion-engine/paramvalidation.vsp?page=zebra
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?q=This%20is%20a%20test%20string
. Expecting
0 1
URL=/inclusion-engine/paramvalidation.vsp?referrer
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?referrer=
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?referrer=https://www.openlinksw.com/robots.txt
.
Expecting
0 1
URL=/inclusion-engine/paramvalidation.vsp?referrer=http://news.bbc.co.uk/
. Expecting
0 1
URL=/inclusion-engine/paramvalidation.vsp?referrer=unicorn
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?url
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?url=
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?url=https://www.openlinksw.com/robots.txt
. Expecting
0 1
URL=/inclusion-engine/paramvalidation.vsp?url=http://news.bbc.co.uk/
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?url=utonagan
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?a&b=2&c=coconut&page=1&offset=10
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?a&b=2&c=coconut&page=1&offset=elephant
. Expecting
0 0
URL=/inclusion-engine/paramvalidation.vsp?q=This%20is%20a%20test%20string&referrer=http://localhost/&url=https://virtuoso.openlinksw.com/
.
Expecting
0 1
URL=/inclusion-engine/paramvalidation.vsp?a=1&b&fail=fail
.
Expecting total failure