如何验证名称字段以避免数字

How to validate name field to avoid numbers

如何使用 bootstrap 或 php 轻松验证表单上输入的姓名?我希望此字段拒绝所有数字 0-9。你能帮帮我吗?

这是字段,它是我使用的表单的一部分:

<input class="form-control" id="name" placeholder="NAME" type="text" name="name">

这是发送表单的 php 脚本:

<?php
 $adresdo = "info@takelake.com";
  $temat = "Newsletter signup";
  $zawartosc = "Imie: ".$_POST['name']."\n"
       ."Email: ".$_POST['email']."\n"
       ."Selected".implode($_POST['checkbox'],",");

// if the url field is empty 
if(isset($_POST['url']) && $_POST['url'] == ''){

  if(!$_POST['name'] || !$_POST['email']){
     header("Location: error.html");
   exit;
}
$email = $_POST['email'];
if(mail($adresdo, $temat, $zawartosc, 'From: Subskrybent <'.$email.'>'))
{
   header("Location: ok.html"); 
}


} 

   header("Location: error.html");
  ?>

使用以下代码检查它是否包含数字:

if(preg_match('~[0-9]~', $_POST['name'])) {
    //has numbers
} else {
   //no numbers
}

更新了您的代码:

<?php
$adresdo = "info@takelake.com";
$temat = "Newsletter signup";
$zawartosc = "Imie: ".$_POST['name']."\n"
   ."Email: ".$_POST['email']."\n"
   ."Selected".implode($_POST['checkbox'],",");

// if the url field is empty 
if(isset($_POST['url']) && $_POST['url'] == ''){
 // then send the form to your email
  mail( 'you@yoursite.com', 'Contact Form', print_r($_POST,true) ); 

  if(!$_POST['name'] || !$_POST['email']){
     header("Location: error.html");
   exit;
    if(preg_match('~[0-9]~', $_POST['name'])) {
        header("Location: error.html");
        exit();
    } 
}
$email = $_POST['email'];
if(mail($adresdo, $temat, $zawartosc, 'From: Subskrybent <'.$email.'>'))
{
    header("Location: ok.html");
    exit(); 
}


} 

   header("Location: error.html");
   exit();
  ?>

要检查字符串是否包含 PHP 中的数字,正则表达式是可行的方法:

if (preg_match('/[0-9]+/', $_POST['field_name'])) {
    // add logic if the POST value has numbers in it...
}

如果您想将其重用于其他操作,也可以将其包装在一个函数中:

function containsNumbers($string) {
    return preg_match('/[0-9]+/', $string) > 0;
}

像这样使用:

if (containsNumbers($_POST['field_name'])) {
    // logic here
}

不要只依赖前端验证。这就是后端的用途。 HTML 输入模式和 javascript 验证很容易被绕过。最佳做法是通过 Javascript 检查前端以获得更好的 UI 响应,但通过 PHP 重新检查后端以防用户试图规避规则。

这是 Javascript 中的检查器:

var checkIsValidName = function(string) {
    // returns false if string contains numbers
    var pattern = /[^0-9]+/;

    // returns false if string contains chars other than A-Z, a-z, space, apostraphe and hyphen
    // also returns false on accented characters, as this checks the ASCII values
    var pattern = /[A-Za-z\s\'-]/;

    return string.match(pattern);
}

用法:

if (checkIsValidName()) {
    // javascript logic here
    alert('Not Valid Name');
}

此正则表达式模式将匹配所有字母、空格、连字符、撇号和标准重音字符(西欧):

[A-Za-z\s\'-ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüý]

你看这很快就会变得混乱,如果字符串包含我们不包括的任何非 ASCII 字母,例如西里尔字母、波兰语和任何亚洲字母字符,它将拒绝该字符串。

因为如果这样,最好是 exclusive 而不是 inclusive 用正则表达式检查,因为总会有更多的字符你将允许而不是你不允许的。当然,这指的是人们的姓名,而不是密码或电子邮件地址,您要在其中使用包含模式(因为您实际可以使用的字符有限制)。

注意: 虽然有用且看似简单,但在输入标签中使用 HTML5 pattern 属性并不安全,因为这是不受支持的在 IE9 和 Safari 中。

最好通过 javascript 检查快速响应 UI,而不是阻止大多数错误的输入,但你 总是 应该让 PHP 后端处理最终验证 - 确保保留用户的输入,因此他们不必多次输入信息,保存以供编辑。

将 AJAX 与 JavaScript 和 PHP 结合使用以获得数据和用户体验的最佳结果。

你可以为此使用 html5 代码,这将允许 space,如果你想检查至少 2 个字符,则使用 [a-zA-Z][a-zA-Z ]{2,} 或使用 [a-zA-Z][a-zA-Z ]{1,}

<input type="text" name="name" pattern="[a-zA-Z][a-zA-Z ]{2,}" required>

这不允许 space

 <input type="text" name="name" pattern="[a-zA-Z]{1,}" required>

了解更多信息

https://www.w3schools.com/tags/att_input_pattern.asp

这是php验证

<?php
$adresdo = "info@takelake.com";
$temat = "Newsletter signup";
$zawartosc = "Imie: " . $_POST['name'] . "\n"
    . "Email: " . $_POST['email'] . "\n"
    . "Selected" . implode($_POST['checkbox'], ",");

// if the url field is empty
if (isset($_POST['url']) && $_POST['url'] == '') {
    // then send the form to your email
    mail('you@yoursite.com', 'Contact Form', print_r($_POST, true));

    if (!$_POST['name'] || !$_POST['email']) {
        header("Location: error.html");
    }
    if (preg_match('~[0-9]~', $_POST['name'])) {
        header("Location: error.html");
        exit();
    }

    $email = $_POST['email'];
    if (mail($adresdo, $temat, $zawartosc, 'From: Subskrybent <' . $email . '>')) {
        header("Location: ok.html");
    }
}

pattern="[A-Za-z]" 其默认属性为html<input class="form-control" id="name" placeholder="NAME" type="text" pattern="^\D*$" name="name" title="Number Not Allowed">