【发布时间】:2017-02-01 11:13:20
【问题描述】:
我有一个 Web 表单曾经可以正常工作,但突然之间,它不再在 Chrome 中工作了。这些模式在 regex101.com 上通过了测试,并且可以使用 Firefox 提交表单,但 Chrome 不再喜欢它了。最令人困惑的是它在不同的点上都失败了,即使没有改变形式。 (EG有时名字失败,有时姓氏失败 - 即使模式相同。有时它会归结为电话号码或URL。无法想象为什么。)我已经尽我所能分析了它 -有什么建议吗?
<form name="form-careers" enctype="multipart/form-data" action="/careers/#form" method="POST">
<div class="form_labels">
<p><label for="fname">First Name:</label></p>
</div>
<div class="form_inputs">
<p><input type="text" name="fname" id="fname" placeholder="*" pattern="/^([A-Za-z-\ \.]+)$/" value="<?php if (isset($fname)) { echo $fname; } ?>" required /></p>
<div class="error" id="error-fname"><?php if (isset($err_fname)) { echo $err_fname; } ?><?php if (isset($err_fname2)) { echo $err_fname2; } ?></div>
</div>
<div class="form_labels">
<p><label for="lname">Last Name:</label></p>
</div>
<div class="form_inputs">
<p><input type="text" name="lname" id="lname" placeholder="*" pattern="/^([A-Za-z-\ \.]+)$/" value="<?php if (isset($lname)) { echo $lname; } ?>" required /></p>
<div class="error" id="error-lname"><?php if (isset($err_lname)) { echo $err_lname; } ?><?php if (isset($err_lname2)) { echo $err_lname2; } ?></div>
</div>
<div class="form_labels">
<p><label for="email">Email:</label></p>
</div>
<div class="form_inputs">
<p><input type="email" name="email" id="email" placeholder="*" pattern="/^([\dA-Za-z0-9\._-]+)@([\dA-Za-z0-9\._-]+)\.([A-Za-z]{2,10})$/" value="<?php if (isset($email)) { echo $email; } ?>" required /></p>
<div class="error" id="error-email"><?php if (isset($err_email)) { echo $err_email; } ?><?php if (isset($err_email2)) { echo $err_email2; } ?></div>
</div>
<div class="form_labels">
<p><label for="phone">Phone:</label></p>
</div>
<div class="form_inputs">
<p><input type="tel" name="phone" id="phone" placeholder="* (###-###-####)" pattern="/^([\d]{3})\-([\d]{3})\-([\d]{4})$/" value="<?php if (isset($phone)) { echo $phone; } ?>" required /></p>
<div class="error" id="error-phone"><?php if (isset($err_phone)) { echo $err_phone; } ?><?php if (isset($err_phone2)) { echo $err_phone2; } ?></div>
</div>
<div class="form_labels">
<p><label for="role">Desired Role:</label></p>
</div>
<div class="form_inputs">
<p><input type="text" name="role" id="role" placeholder="*" pattern="/^([\\\/A-Za-z-\ \.]+)$/" value="<?php if (isset($role)) { echo $role; } ?>" required /></p>
<div class="error" id="error-role"><?php if (isset($err_role)) { echo $err_role; } ?><?php if (isset($err_role2)) { echo $err_role2; } ?></div>
</div>
<div class="form_labels">
<p><label for="portfolio">Portfolio/Website:</label></p>
</div>
<div class="form_inputs">
<p><input type="url" name="portfolio" id="portfolio" placeholder="(http://...)" pattern="/^(https?:\/\/)?([\dA-Za-z\.-]+)\.([A-Za-z\.]{2,6})([\/\w \.-]*)*\/?$/" value="<?php if (isset($portfolio)) { echo $portfolio; } ?>" required /></p>
<div class="error" id="error-portfolio"><?php if (isset($err_portfolio)) { echo $err_portfolio; } ?><?php if (isset($err_portfolio2)) { echo $err_portfolio2; } ?></div>
</div>
<div class="form_labels">
<p><label for="resume">Upload Resume: (optional)</label></p>
</div>
<div class="form_inputs">
<p><input type="file" name="resume" id="resume" accept=".pdf, .txt, .rtf, .doc, .docx" style="margin-bottom:2px;"/>
<span style="color:#777;">(pdf, txt, rtf, doc, docx)</span></p>
</div>
<input type="hidden" name="formtype" id="formtype" value="careers">
<div class="form_labels submit">
<p> </p>
</div>
<div class="form_inputs">
<a href="javascript:void(0);"><input type="submit" value="Submit" name="action" class="button-red" ></a>
</div>
【问题讨论】:
-
遇到了同样的问题。我可能已经发疯了,但我很确定它输入验证模式在过去几天刚刚停止在 chrome 上工作。但是,我不相信 chrome 会在我们不知情的情况下自行更新。
-
您在 DevTools 控制台中看到任何警告吗?
-
控制台中没有任何内容...
-
不应该是
pattern="^([A-Za-z-\ \.]+)$"没有/s 围绕正则表达式?您也可以将其写为pattern="[A-Za-z .-]+",因为该模式默认是锚定的,无需在这些位置转义连字符和点。 -
我最初拥有所有在正则表达式周围没有斜线的模式,并在出现此问题时根据另一篇帖子的建议添加了它们。但模式是否包含在斜杠中似乎并不重要——它只是在不同的地方失败了。还是不解……
标签: regex forms validation