我有以下代码:
<label for="nome">Nome*:
<input type="text" maxlength="100" name="nome" value="<?= he($nome) ?>" id="nome" />
</label>
function he($s) {
return htmlentities($s, ENT_QUOTES, CHAR_SET);
}
如何限制此代码中字符的使用?我只想接受字母、空格和重音符号。,
谢谢大家。
“好”的方法是使用pattern
属性,它只允许您决定直接从 HTML 中允许的字符,而根本不允许输入其他字符。为此,您使用正则表达式,这与您在 PHP 和 JavaScript 中所做的非常相似。
<input type="text" pattern="[A-Za-zÀ-ÿ ]*" placeholder="Only letters, spaces and accentuated letters" />
显然,À 是字符表中第一个成为重读字符的字符,它们都紧随其后,直到最后一个,ÿ。但是,如果您不相信这一点,您也可以列出您的字符,例如[A-Za-zÀÈÉÊêéàèâ ]*
, 。
但是,现在需要注意的是,这种方法没有得到广泛支持,无法单独使用。
编辑 2017-01-16:正如在 Caniuse.com 上看到的那样,时代变了,人们更新了他们的浏览器。IE 8-9 的使用率显着下降,IE 11 已针对 Windows 7 发布,许多 IE 用户已对其进行了更新。许多人会声称,在这一点上,可以通过仅使用pattern
属性客户端来减轻您的站点的重量,而让旧的浏览器用户由服务器端验证来处理。
但是请记住,无论如何,您仍然需要在服务器端验证所有内容,这不仅是为了避免旧浏览器用户的意外结果,而且主要是因为不这样做将是一个很大的安全漏洞。
如果您想在不支持该属性的浏览器上甚至无法键入这些字符,则pattern
需要使用 JavaScript。这有点痛苦,但很可能,您可以在某处找到预制的功能。
如果你想自己做,它就像在你的文本字段上添加一个 onKeyUp 事件一样,每次输入一个字符时,用你的正则表达式检查字符串并从中删除任何不允许的内容。
无论您在客户端(HTML 和 JS)做什么,前提是您的PHP 需要检查其传入的值,以便它们符合您的要求。
它可以像这样简单,在您的“表单发送”页面上。
<?php
$clientName=$_POST['clientName'];
if(!preg_match('/[A-Za-zÀ-ÿ ]*/',$clientName)) {
//If $clientName does NOT match [capital letters, lower-case letters,
//accentuated characters and space] (zero or any number of times)
echo '<div class="error">Only letters, spaces and accentuated letters are allowed.</div>';
}
else {
echo '<div class="success">Form submitted successfully.</div>';
}
?>
PS:如果确实是一个名字,也可以接受连字符。否则玛丽珍会伤心。