我必須驗證表單中的一些資料,但它們都不起作用,但我需要一些幫助來驗證用戶名,希望以后可以解決其他問題。
所以這是我的表格,沒什么不尋常的:
<!-- inscription.html -->
<form action="inscription_traitement.php" method="post">
<input type="text" name="username"/>
<input type="submit" name="submit" value="S'inscrire"/>
</form>
然后重定向到我的驗證檔案(inscription_traitement.php):
<?php
if (isset($_POST["submit"])){
$username = $_POST["username"];
require_once "functions.php";
// Here is the problem
if(invalidUsername($username) == false){
header("Location: inscription.php?error=invalid_username");
exit();
}
}
else{
//redirect to the signup page
header("location: inscription.php");
}?>
最后我創建了一個重新組合我所有函式的檔案(functions.php):
<?php
function invalidUsername($username){
$usernameRegex = "/^[\w-]{5,15}$/D";
return (bool)preg_match($usernameRegex, $username);
}?>
問題如下:invalidUsername () 函式總是回傳 false,即使我在用戶名欄位中輸入了正確的資料。我在線嘗試了我的正則運算式并且它有效。我不明白我在哪里搞砸了,邏輯對我來說似乎很好。
uj5u.com熱心網友回復:
有兩個問題:
- 在最新的 PHP 版本中,字符類中的連字符位置是嚴格的,它應該位于模式的開頭以避免任何問題
- 模式必須是錨定的,即它必須匹配整個字串,否則
{5,15}限制量詞毫無意義。
你需要使用
function invalidUsername($username){
$usernameRegex = "/^[\w-]{5,15}$/D";
return (bool)preg_match($usernameRegex, $username));
}
詳情:
^- 字串的開始[\w-]{5,15}- 五到十五個 ASCII 字母、數字、下劃線或連字符$- 字串結束D- 該標志表示字串$錨點的結尾僅匹配字串的結尾。
uj5u.com熱心網友回復:
破折號字符匹配從 X 到 Y的字符:
az = 從“a”到“z”
匹配 0-9 = 從“0”到“9”匹配
最后一個破折號的解釋方式相同:
9-_ = 從“9”匹配到“_”
這顯然是無稽之談。為避免這種情況,您必須使用 \ 轉義破折號字符
例子:
/[A-Za-z0-9\-_]{5,15}/
uj5u.com熱心網友回復:
正則運算式:
[0-9] # A single digit
[_] # An underscore
[0-9] # A single digit
根據 PHP 手冊:
preg_match()如果模式匹配給定的主題,則回傳 1,如果不匹配,則回傳 0,否則回傳 false。
我推薦在線 preg_match 編輯器: https ://www.phpliveregex.com/#tab-preg-match
這將解決您的問題。我無法驗證您提供的字串引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479781.html
下一篇:洗掉文本中不必要的空格
