2017-04-17 92 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它。 –