2017-04-17 138 views
0

如何使用bootstrap或php轻松验证表单上的名称输入?我想要这个字段拒绝所有数字0-9。你能帮我解决吗?如何验证名称字段以避免数字

这里是现场,这是我用表格的一部分:

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

这是PHP脚本的形式发送:

<?php 
$adresdo = "[email protected]"; 
    $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"); 
    ?> 
+0

我不是在PHP非常好,所以如果你能帮助我修改代码我会很感激。谢谢 –

+0

你想在哪里验证 - 通过PHP或JavaScript? – splash58

+0

javascript可能会有用。它可以是纯粹的JavaScript而不是jQuery?或jquery很好。请注意我在这里使用引导,如果这有帮助 –

回答

1

你可以使用HTML5代码这一点,这将使空间,如果你想至少检查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> 

,这不是让空间

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

获取更多信息

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

,这是php验证

<?php 
$adresdo = "[email protected]"; 
$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('[email protected]', '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"); 
    } 
} 
+1

这(HTML中的模式)将拒绝合法字符,如空格和重音字母,连字符和撇号 - 它们是名称中的合法字符。正则表达式跳棋应该是包容性的,而不是排他性的。 – mwieczorek

+0

检查我的更新答案,允许 –

+0

为什么不使用'[^ ​​0-9] +'代替?这是数字所独有的。 '+'与'{1,}'相同 – mwieczorek

0

使用下面的代码检查它包含数:

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

更新您的代码:

<?php 
$adresdo = "[email protected]"; 
$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('[email protected]', '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(); 
    ?> 
+0

谢谢你shr3jn。你可以看看我的代码,并通过添加代码来修改它吗?我不擅长php。谢谢 –

+0

这几乎工作。它发送消息以防万一,但它显示错误页面。即使该消息被验证并发送。 –

+0

@PiotrCiszewski exit()已添加到发送的邮件上。 – shr3jn

1

要检查是否字符串在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'); 
} 

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

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

你看到这可能会变得凌乱,它会拒绝字符串,如果它con保留了我们不包括的任何非ASCII字母,如西里尔字母,波兰语和任何亚洲字母字符。

因为如果这样,最好是独家,而不是包容用正则表达式检查,因为总是会有更多的字符,你会允许,而不是你不允许的。当然,这是指人们的NAMES,而不是密码或电子邮件地址,您希望使用包容性模式(因为您实际可以使用的字符数有限制)。

注意:尽管有用且看起来很简单,但在输入标签中使用HTML5 pattern属性并不安全,因为这在IE9和Safari中不受支持。

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

在JavaScript和PHP中使用AJAX可获得最佳的数据结果和用户体验。

1

模式= “[A-ZA-Z]” 它的HTML的默认属性<input class="form-control" id="name" placeholder="NAME" type="text" pattern="^\D*$" name="name" title="Number Not Allowed">

+0

这将拒绝合法字符,如空格和重音字母,连字符和撇号 - 这是名称中的合法字符。正则表达式跳棋应该是包容性的,而不是排他性的。 – mwieczorek

+0

我编辑我的答案请chek它。 –