为什么正则表达式是“\d+(-\d+)?[A-Z]?”不匹配 HTML5 模式属性中的字符串“180-186”?
Why is the regex "\d+(-\d+)?[A-Z]?" not matching the string "180-186" in a HTML5 pattern attribute?
我有以下 HTML5 表格:
<form id="address-form" method="POST">
// ...other inputs that work fine
<input type="text" name="street_number" class="form-control" placeholder="Street No.*" tabindex="3" required pattern="\d+(-\d+)?[A-Z]?" title="Please enter only digits separated by a single optional hyphen, with a single optional letter suffix.">
<input type="text" name="street_address" class="form-control" placeholder="Address*" tabindex="4" required pattern="[A-z ]+" title="Please enter only letters and spaces.">
// ...other inputs that work fine
</form>
以及以下jQuery:
let form = $('#address-form');
form.find('[required]').each((i, elem) => {
invalidElem = $(elem);
// ...more unrelated code
if (elem.name === 'password1' && elem.value !== '') {
password = elem.value;
}
if (elem.name === 'password2') {
elem.setCustomValidity(elem.value === password ? '' :
'This field must match the password field.');
}
invalidElem.removeAttr('style');
return (isValid = elem.reportValidity());
});
我正在测试对显示为字符串“180-186”的第一个输入的验证,但它失败了。为什么?
根据 https://regex101.com/ 这应该在 JavaScript 中工作正常,我认为这是浏览器用来验证 pattern
属性的正则表达式引擎...但是 Chrome (至少)似乎反驳了这个假设,所以如果有人明确知道浏览器使用的 actual 正则表达式引擎,我很想知道。
以防万一,此输入需要使用地址的街道号码部分。所以“143”、“22A”、“180-186”和“1-7A”都应该匹配,但是除了结尾之外的任何地方都有字母应该 not 匹配,也不应该匹配多个连字符、字母或任何空格。
我也会接受任何对我对房屋或建筑编号的严格定义做出合理妥协的答案。
非常感谢任何帮助:-)
事实证明,当我在 HTML...d'oh!
中输入静态值时,VS Code 只是简单地将我的连字符变成了 em 破折号
无论如何,感谢所有试图提供帮助的评论:-)
我有以下 HTML5 表格:
<form id="address-form" method="POST">
// ...other inputs that work fine
<input type="text" name="street_number" class="form-control" placeholder="Street No.*" tabindex="3" required pattern="\d+(-\d+)?[A-Z]?" title="Please enter only digits separated by a single optional hyphen, with a single optional letter suffix.">
<input type="text" name="street_address" class="form-control" placeholder="Address*" tabindex="4" required pattern="[A-z ]+" title="Please enter only letters and spaces.">
// ...other inputs that work fine
</form>
以及以下jQuery:
let form = $('#address-form');
form.find('[required]').each((i, elem) => {
invalidElem = $(elem);
// ...more unrelated code
if (elem.name === 'password1' && elem.value !== '') {
password = elem.value;
}
if (elem.name === 'password2') {
elem.setCustomValidity(elem.value === password ? '' :
'This field must match the password field.');
}
invalidElem.removeAttr('style');
return (isValid = elem.reportValidity());
});
我正在测试对显示为字符串“180-186”的第一个输入的验证,但它失败了。为什么?
根据 https://regex101.com/ 这应该在 JavaScript 中工作正常,我认为这是浏览器用来验证 pattern
属性的正则表达式引擎...但是 Chrome (至少)似乎反驳了这个假设,所以如果有人明确知道浏览器使用的 actual 正则表达式引擎,我很想知道。
以防万一,此输入需要使用地址的街道号码部分。所以“143”、“22A”、“180-186”和“1-7A”都应该匹配,但是除了结尾之外的任何地方都有字母应该 not 匹配,也不应该匹配多个连字符、字母或任何空格。
我也会接受任何对我对房屋或建筑编号的严格定义做出合理妥协的答案。
非常感谢任何帮助:-)
事实证明,当我在 HTML...d'oh!
中输入静态值时,VS Code 只是简单地将我的连字符变成了 em 破折号无论如何,感谢所有试图提供帮助的评论:-)