If you run any hostname through UriNormalize, at some point the normalize function in the Uri module is run. This module calls normalizePath function.
This function appends a / to the end of the URI.
Next, when you try to validate the URI with Hostname validator with 'useTldCheck' => true, in the options, it will always fail.

Steps to reproduce
Have the following in a fieldset
$this->add( [ 'name' => 'someUrl', 'required' => true, 'type' => Text::class, 'options' => [ 'label' => 'Some URL', ], 'attributes' => [ 'maxlength' => 100, ], ] );
Have the following in an InputFilter:
$this->add( [ 'name' => 'someUrl', 'required' => true, 'filters' => [ ['name' => StringTrim::class], ['name' => StripTags::class], [ 'name' => ToNull::class, 'options' => [ 'type' => ToNull::TYPE_STRING, ], ], [ 'name' => UriNormalize::class, 'options' => [ 'enforcedScheme' => 'https', ], ], ], 'validators' => [ [ 'name' => StringLength::class, 'options' => [ 'min' => 1, 'max' => 100, ], ], [ 'name' => Hostname::class, 'options' => [ 'allow' => Hostname::ALLOW_DNS, // Allow only DNS names 'useIdnCheck' => true, // Check IDN domains - International Domain Names - supports international characters in DNS of country TLD, e.g. *.de (Germany) TLD 'useTldCheck' => true, // Validates the existence of the TLD itself (the .com part of the domain) ], ], [ 'name' => Uri::class, 'options' => [ 'allowRelative' => false, ], ], ], ] );
I've got a few more issues reported that I'm solving, next to projects and a full-time job, I most likely will not have time to fix this. Would appreciate someone stepping in to fix this one. If not I might get around to it after other issues in zend-form and/or zend-inputfilter are finished.