html - 为什么正则表达式“\d+(-\d+)?[AZ]?” 与 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());
});
我正在测试使用字符串“180-186”显示的第一个输入的验证,但它失败了。为什么?
根据https://regex101.com/,这在JavaScript中应该可以正常工作,我认为这是浏览器用来验证pattern
属性的正则表达式引擎......但Chrome(至少)似乎反驳了这个假设,所以如果有人明确知道我很想知道浏览器使用的实际正则表达式引擎。
如果对任何人都不明显,则此输入需要采用地址的门牌号部分。所以“143”、“22A”、“180-186”和“1-7A”应该都匹配,但是除了结尾之外的任何地方都应该不匹配,任何带有多个连字符、字母或任何空格的东西也不应该匹配。
我也接受任何对我对房屋或建筑编号的严格定义提出合理妥协的答案。
任何帮助将不胜感激:-)
解决方案
事实证明,当我在 HTML 中输入静态值时,VS Code 只是将我的连字符变成了破折号……d'oh!
无论如何感谢所有评论试图提供帮助的人:-)
推荐阅读
- c# - 如何声明一个空的 ClientContext
- xml - Spring 4 控制器字符串到 XML 响应
- kotlin - 如何使用 TestPropertyProvider 并使用 Kotlin 向 Micronaut 注入 RxHttpClient
- c# - 如何从 WPF 中的项目容器中获取项目?
- diff - 如何在 sphinx 的重组文本中突出显示差异输出文本?
- javascript - 使用 appendChild 时 justify 属性无效
- post - 在 POST API 调用中导入身份验证
- reactjs - 在 Windows 上运行放大配置命令时出错
- rust - 如何将特征转换为具体类型?
- c# - 获取启动我的应用程序的文件的路径