Preg_match和Preg_replace特定格式

时间:2013-12-10 23:58:23

标签: php regex

我需要帮助preg match / replace forma我真的无法理解它的工作原理以及每个元素在做什么。

到目前为止,我有这个:

$username = preg_replace('/\s+/', '_', $_POST['uname']);
if(preg_match('/^[a-zA-Z0-9]{5,12}+$/u', $username))
{ 
    $username =  trim(strip_tags(ucfirst($purifier->purify(@$_POST["uname"]))));
}
else
{
    $message['uname']='wrong username input';
}

对于utf8(希伯来语)我得到了这个:

if(preg_match("/^[\p{Hebrew} a-zA-Z0-9]{2,10}+$/u", $_POST['fname']))
{
    //
}

这是完美的,但我不想让用户名上的希伯来语只是英语。

我试图在多种组合中使用它,我试图改变但没有成功,我在StackOverflow和谷歌上做了研究,但不能让它像我想要的那样我不明白。 我使用了一个RegEx网站并尝试构建但没有成功。

所以到现在为止我得到了这个:

用户可以输入5-12个字母/数字无特殊字符。

我想要的是:

  • 可以输入5-12个字母/数字之间没有特殊的字符 - i 已经拥有它。
  • 允许空格
  • preg_match如果没有像E.G这样的混合语言:$ username =שדגדשsdsd; < - 不允许使用混合语言。

preg_replace来:

  • 将空格替换为空白(删除空格)我有这个但我不知道它是否正确:

$username = preg_replace('/\s+/', '', $_POST['uname']);

另外,我使用的是UTF-8语言。

修改

在hwnd的帮助下,我让它像我想要的最新代码一样工作:

     if(preg_match('/^[\p{Hebrew}]{2,10}|[a-zA-Z]{2,10}$/u', $_POST['fname']) &&  preg_match('/^[a-zA-Z]{2,10}|[\p{Hebrew}]{2,10}$/u', $_POST['fname']))
        {
                     $message = 'valid';
        }else{

          $message = 'Invalid';
        }

解决下,由于

2 个答案:

答案 0 :(得分:1)

我确定如果您在用户名中允许使用空格,只需空格字符即可,但要安全使用与\s\n {\r匹配的\t {1}},\f" "),您可以将其添加到角色类[]

if (preg_match('/^[a-zA-Z0-9\s]{5,12}+$/u', $username)) { ...

您可以保留preg_replace()功能......

更新:要匹配不同的字符,但不能混合,您可以尝试以下操作:

$user = 'hwדגדשרביd';   // "invalid"
$user = 'fooo';         //  "valid"
$user = 'שדגדשרביב';   //  "valid"

if (preg_match('/^[\p{Hebrew}]{2,10}|[a-zA-Z]{2,10}$/u', $user)) {
  echo "valid";
} else {
  echo "invalid";
}

答案 1 :(得分:1)

您的preg_replace用于从用户名中删除空格。

要仅在用户名中允许使用英文字母,数字和空格,请使用:

if (preg_match('/^[a-zA-Z0-9\s]{5,12}+$/u', $username)) {
    # $username is OK
}
else {
    # $username is not OK
}