Regex 我应该在html5输入正则表达式模式验证中使用^和$吗?

Regex 我应该在html5输入正则表达式模式验证中使用^和$吗?,regex,html,validation,browser-bugs,Regex,Html,Validation,Browser Bugs,我看到的大多数示例都没有使用^(扬抑符)和$(货币或美元)字符来标记匹配字符串的开始和结束。然而,我在html5规范中没有发现任何与此相关的内容。它们是否隐含在模式中?html5规范声明它们是隐式的 编译后的模式正则表达式在与字符串匹配时,必须将其开头锚定到字符串的开头,将其结尾锚定到字符串的结尾。 这意味着用于此属性的正则表达式语言与JavaScript中使用的正则表达式语言相同,只是模式属性与整个值相匹配,而不仅仅是与任何子集相匹配(有点像它暗示了一个^(?:在模式的开头,一个)$在模式的结

我看到的大多数示例都没有使用^(扬抑符)和$(货币或美元)字符来标记匹配字符串的开始和结束。然而,我在html5规范中没有发现任何与此相关的内容。它们是否隐含在模式中?html5规范声明它们是隐式的

编译后的模式正则表达式在与字符串匹配时,必须将其开头锚定到字符串的开头,将其结尾锚定到字符串的结尾。 这意味着用于此属性的正则表达式语言与JavaScript中使用的正则表达式语言相同,只是模式属性与整个值相匹配,而不仅仅是与任何子集相匹配(有点像它暗示了一个^(?:在模式的开头,一个)$在模式的结尾)。 在type=“text”输入中,无论使用哪种格式,模式都可以正常工作,但是在type=“tel”输入中,我必须删除字符,正则表达式才能按预期工作。我已经在Opera和Firefox中进行了测试

这是一个浏览器错误吗?我应该在bugzilla等文件中提交一个bug吗



编辑:我似乎偶然发现了一个奇怪的bug,因为我无法创建简化的测试用例。页面中的简单输入不会显示上述行为。然而,问题仍然存在。我应该还是不应该使用darn^和$anchors?

当然你知道电话号码有不同的形式

e、 g

  • 在奥地利维也纳期间,拨打“4000”将为您接通 市政厅
  • 在奥地利因斯布鲁克,你需要拨打“014000”才能拨打维也纳市政厅
  • 在美国纽约时,您需要拨打+4314000才能拨打相同的号码
这是有历史原因的,旧的机械系统将呼叫从一个设备连接到下一个设备的任务委托给每一个数字(这也是为什么分机位于数字的末尾,而不是在DNS的开头,在DNS中,您可以在前面扩展域名,但不能在最后扩展域名的原因)

现在,如果以完全相同的形式给出电话号码,则同时具有锚定
^
$
的正则表达式将只与电话号码匹配。只使用
$
锚定,只要不提供不同的分机号码,它将可靠地匹配相同的电话号码。无锚点,即,无论位置代码和扩展如何,掉落的
^
$
都不会匹配,但会引入不可靠性:


使用“4000”作为维也纳市政厅的图案将与“4000”、“014000”和“+4314000”匹配,但也将与德国银行“+44140001”匹配。

根据标准。然而,在实践中(测试了FF 15和Chrome 21),它仅在开始时锚定


因此,如果您希望与标准和现实兼容,那么应该显式地使用
$
锚定正则表达式。是否使用
^
也取决于您-这是没有必要的。

HTML标准关于的部分仍然指出,它始终锚定在开始和结束处,如问题中所述:

编译后的模式正则表达式在与字符串匹配时,必须将其开头锚定到字符串的开头,将其结尾锚定到字符串的结尾

我们可以使用一个简单的测试片段来确认此行为:


提交

我现在有点困惑。也许我应该在我的问题上贴个例子。例如,使用“^[\d]{10}$”与电话输入中的1234567890不匹配,但它应该,不是吗?这种电话号码的说法是从哪里来的?问题改变了吗?没有,它具体讨论了TEL输入在上下文中输入,我建议使用结束锚(
$
),而不是开始锚(
^
)-对我来说,这是可靠性和匹配广度之间的最佳点。-1因为大多数答案都没有解决所问的问题,在最后两段中,最终解决这个问题的部分是错误的<代码>将拒绝输入
014000
,与此答案相反。在
tel
input中提到这一点:断线会自动从输入值中删除,但不会强制使用其他语法,因为国际电话号码差异很大。可以使用pattern和maxlength等属性来限制在控件中输入的值。。它在
模式
属性描述中没有提到任何关于
tel
类型的具体信息。实际上,如果我检查Firefox,我在
tel
输入中没有看到任何奇怪的行为。你能给出一个完整的例子,包括代码,你期望得到什么,以及你得到了什么吗?是的,我刚刚注意到了这一点,并对问题进行了编辑。我的表单在这里发布有点棘手,但我会看看我能做些什么。你能至少发布它所涉及的
输入
元素的确切代码吗?请提供一个链接,然后您参考一个规范(我希望它来自W3.org),正如W3规范所述,
^
$
是隐含的。这意味着你不需要明确地把它们放在那里;我从下载了Firefox 15,它没有出现您在这里描述的bug。