为什么正则表达式"d+(-d+)?[A-Z]?"与 HTML5 模式属性中的字符串"180-186"不匹配?



我有以下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());
});

我正在测试用字符串"0"表示的第一个输入的验证;180-186〃;它正在失败。为什么?

根据https://regex101.com/这在JavaScript中应该可以很好地工作,我认为JavaScript是浏览器用来验证pattern属性的正则表达式引擎。。。但Chrome(至少(似乎推翻了这一假设,所以如果有人确切地知道浏览器使用的实际正则表达式引擎,我很想知道。

如果对任何人来说都不明显,则此输入需要获取地址的街道编号部分。所以"143〃"22A"180-186〃;以及";1-7A";应全部匹配,但结尾以外的任何位置都有字母,则不应匹配,也不应匹配任何带有多个连字符、字母或任何空格的内容。

我也会接受任何对我对房子或建筑编号的严格定义提出合理妥协的答案。

事实证明,当我在HTML中键入静态值时,VS Code只是将我的连字符变成了em短划线。。。哦!

无论如何,感谢所有评论试图帮助的人:-(

最新更新