0

我有以下代码:

<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);
}

如何限制此代码中字符的使用?我只想接受字母、空格和重音符号。,

谢谢大家。

4

1 回答 1

2

“好”的方法是使用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:如果确实是一个名字,也可以接受连字符。否则玛丽珍会伤心。

于 2013-08-20T18:30:08.357 回答