【发布时间】:2021-05-24 12:16:47
【问题描述】:
我想在发送到服务器 (php) 之前验证表单输入(用户名 + 密码)。 因此我在输入标签中应用了模式属性。 我想出了一个在服务器端完成这项工作的 RegEx 表达式:
(preg_match_all('/^[a-zA-Z0-9. _äöüßÄÖÜ@-]{1,50}$/', $_POST['username']) == 0)
因此使用 preg_match_all(而不是 preg_match)设置全局标志。
现在我想在 HTML 表单的模式属性中实现相同的 RegEx。 HTML standard 定义模式属性中的 RegEx 遵循 JavaScript 中的 RegEx,它将表达式划分为用逗号分隔的“模式、标志”。我会把它翻译成这样的 HTML:
pattern="^[a-zA-Z0-9. _äöüßÄÖÜ@-]{1,50}$,g"
这行不通。
我发现的所有 JavaScript RegEx 验证器都将模式括在斜杠中:
/^[a-zA-Z0-9. _äöüßÄÖÜ@-]{1,50}$/
说,全局标志将在最后一个斜线后面:
pattern="/^[a-zA-Z0-9. _äöüßÄÖÜ@-]{1,50}$/g"
这也不行。
Mozilla 在他们的开发者指南中也有说明(我也在其他地方读过):
不应在模式文本周围指定正斜杠。
那么,如何才能将全局标志放入输入元素的模式属性中呢?
【问题讨论】: