只允许大写和小写字母

时间:2013-02-06 04:43:54

标签: php html

我只想接受用户的小写和大写字母。

我尝试了以下代码,它回显了无效的字符消息,但不起作用。我的意思是它没有检查。它只显示消息。有什么帮助吗?

<form action="" method="post">
<input type="text" name="fname">
<input type="submit" value="Send" name="submit">
</form>

更新:这是我必须检查并将名称插入数据库的内容。如果名称中找到的数字通过显示错误消息拒绝名称,否则如果名称仅包含字母,则将其插入数据库。这就是我想要实现的目标。

<?php
if ( isset( $_POST['submit'] ) ) { 
$fname = $_POST["fname"];

if(!preg_match ('/^([a-zA-Z]+)$/', $fname)){
echo "Invalid characters";
}

if (empty($fname)) {
echo  '<span> First name is required</span>';
}

else{
$mysqli = new mysqli("localhost", "root", "", "test");
$stmt = $mysqli->prepare("INSERT INTO test (firstname) VALUES (?)");

$stmt->bind_param("s", $fname);
$stmt->execute();

$stmt->close();

$mysqli->close();


}
}
?>

5 个答案:

答案 0 :(得分:6)

如果你只是想检查一下你可以使用ctype_alpha(),但你说你只想 ACCEPT 字母,所以如果你选择接受输入,你可以:

$fname=preg_replace('/[^a-z]/i','',$fname);
检查后

更好

答案 1 :(得分:5)

if(!isset($_POST['fname']) || !ctype_alpha($_POST['fname'])){
  // can i haz alpha letters only?
}

reference

答案 2 :(得分:1)

代码存在一些问题,您可能遇到的问题可能是您在同一个PHP文件中使用了表单及其处理。这是可能的,但它需要一种不同的方法。对于初学者来说,最好将它们分开。

发布的代码会发生的事情是PHP处理器在没有提交表单时尝试处理表单数据,甚至没有检查是否存在数据。现在$fname未定义,因此测试总是失败。

测试也是错误的。现在它只检查$fname是否包含至少一个字母。例如,if(!preg_match ('/^[a-zA-Z]+$/', $fname))会测试$fname是否包含一个或多个Ascii字母而不是其他内容。

答案 3 :(得分:0)

使用这个,这给了我正确答案

if(!preg_match ('/^([a-zA-Z]+)$/', $fname)){
    echo "Invalid characters";
}
else{
    echo "correct";
}

答案 4 :(得分:0)

检查与[a-zA-Z]模式不匹配的字符的一般想法是好的。

但是,如果您希望此功能正常,则if条件的“非”部分位于错误的位置。您现在所拥有的只是确保fname中的任何单个字符都是大写或小写拉丁字母。

您希望将逻辑的“非”部分推入模式:

if (preg_match('/[^a-zA-Z]/', $fname)) {

检查fname中的任何字符是否不是拉丁字母,这是您正在尝试做的事情。

编辑:您的新更新有一个不同的测试也可以工作(它似乎来自源代码的更新答案,但您可以从这里的不同答案中获得多个测试,这些测试同样有效) 。但是,您更新的帖子清楚地表明您的问题并不是真正用于测试名称的模式。

您的代码如下所示:

if (/* invalid fname */) {
    echo "Invalid characters";
}

if (/* empty fname */) {
    echo  '<span> First name is required</span>';
}

else {
    /* insert into database */
}

else子句仅取决于它之前的if:检查fname是否为空。换句话说,无论检查fname字符的结果如何,只要它不为空,就将其插入数据库。

解决此问题的一种简单方法是将您的第二个if更改为elseif。这会将所有三个条件链接在一起,因此只有在未触发打印错误消息的早期条件的两个时才会出现最终else块。

if (/* empty fname */) {
    echo  'First name is required.';
}

elseif (/* invalid fname */) {
    echo 'Invalid characters';
}

else {
    /* insert into database */
}