Skip to content

Commit

Permalink
Make schemes case insensitive (#152)
Browse files Browse the repository at this point in the history
  • Loading branch information
samdark committed Nov 10, 2021
1 parent 3b5ce61 commit ebf4532
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
17 changes: 16 additions & 1 deletion src/Widget/Attribute/FieldAttributes.php
Expand Up @@ -210,7 +210,13 @@ private function addValidatorAttributeHtml(
}
if ($rule instanceof Url && $type === self::TYPE_URL) {
/** @var array<array-key, string> */
$schemes = $rule->getOptions()['validSchemes'];
$validSchemes = $rule->getOptions()['validSchemes'];

$schemes = [];
foreach ($validSchemes as $scheme) {
$schemes[] = $this->getSchemePattern($scheme);
}

/** @var array<array-key, float|int|string>|string */
$pattern = $rule->getOptions()['pattern'];
$normalizePattern = str_replace('{schemes}', '(' . implode('|', $schemes) . ')', $pattern);
Expand All @@ -221,6 +227,15 @@ private function addValidatorAttributeHtml(
return $attributes;
}

private function getSchemePattern(string $scheme): string
{
$result = '';
for ($i = 0, $length = mb_strlen($scheme); $i < $length; $i++) {
$result .= '[' . mb_strtolower($scheme[$i]) . mb_strtoupper($scheme[$i]) . ']';
}
return $result;
}

/**
* Return the input id.
*
Expand Down
10 changes: 5 additions & 5 deletions tests/Widget/FieldTest.php
Expand Up @@ -540,7 +540,7 @@ public function testAddAttributesUrlValidator(): void
$expected = <<<'HTML'
<div>
<label for="attributesvalidatorform-url">Url</label>
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" maxlength="20" minlength="15" required pattern="^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])">
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" maxlength="20" minlength="15" required pattern="^([hH][tT][tT][pP]|[hH][tT][tT][pP][sS]):\/\/(([a-zA-Z0-9][a-zA-Z0-9_-]*)(\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+)(?::\d{1,5})?([?\/#].*$|$)">
<div class="hasError">Value cannot be blank.</div>
</div>
HTML;
Expand All @@ -556,7 +556,7 @@ public function testAddAttributesUrlValidator(): void
$expected = <<<'HTML'
<div>
<label for="attributesvalidatorform-url">Url</label>
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" value="http://a.com" maxlength="20" minlength="15" required pattern="^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])">
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" value="http://a.com" maxlength="20" minlength="15" required pattern="^([hH][tT][tT][pP]|[hH][tT][tT][pP][sS]):\/\/(([a-zA-Z0-9][a-zA-Z0-9_-]*)(\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+)(?::\d{1,5})?([?\/#].*$|$)">
<div class="hasError">Is too short.</div>
</div>
HTML;
Expand All @@ -572,7 +572,7 @@ public function testAddAttributesUrlValidator(): void
$expected = <<<'HTML'
<div>
<label for="attributesvalidatorform-url">Url</label>
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" value="http://awesomexample.com" maxlength="20" minlength="15" required pattern="^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])">
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" value="http://awesomexample.com" maxlength="20" minlength="15" required pattern="^([hH][tT][tT][pP]|[hH][tT][tT][pP][sS]):\/\/(([a-zA-Z0-9][a-zA-Z0-9_-]*)(\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+)(?::\d{1,5})?([?\/#].*$|$)">
<div class="hasError">Is too long.</div>
</div>
HTML;
Expand All @@ -588,7 +588,7 @@ public function testAddAttributesUrlValidator(): void
$expected = <<<'HTML'
<div>
<label for="attributesvalidatorform-url">Url</label>
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" value="awesomexample.com" maxlength="20" minlength="15" required pattern="^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])">
<input type="url" id="attributesvalidatorform-url" class="is-invalid" name="AttributesValidatorForm[url]" value="awesomexample.com" maxlength="20" minlength="15" required pattern="^([hH][tT][tT][pP]|[hH][tT][tT][pP][sS]):\/\/(([a-zA-Z0-9][a-zA-Z0-9_-]*)(\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+)(?::\d{1,5})?([?\/#].*$|$)">
<div class="hasError">Is not a valid URL.</div>
</div>
HTML;
Expand All @@ -604,7 +604,7 @@ public function testAddAttributesUrlValidator(): void
$expected = <<<'HTML'
<div>
<label for="attributesvalidatorform-url">Url</label>
<input type="url" id="attributesvalidatorform-url" class="is-valid" name="AttributesValidatorForm[url]" value="http://example.com" maxlength="20" minlength="15" required pattern="^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])">
<input type="url" id="attributesvalidatorform-url" class="is-valid" name="AttributesValidatorForm[url]" value="http://example.com" maxlength="20" minlength="15" required pattern="^([hH][tT][tT][pP]|[hH][tT][tT][pP][sS]):\/\/(([a-zA-Z0-9][a-zA-Z0-9_-]*)(\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+)(?::\d{1,5})?([?\/#].*$|$)">
</div>
HTML;
$this->assertEqualsWithoutLE(
Expand Down

0 comments on commit ebf4532

Please sign in to comment.