【问题标题】:Preg match and Preg replace specific formatPreg 匹配和 Preg 替换特定格式
【发布时间】:2013-12-10 23:58:23
【问题描述】:

我需要有关预匹配/替换形式的帮助,我真的无法理解它的工作原理以及每个元素的作用。

到目前为止,我有这个:

$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 和 Google 进行了研究,但无法让它像我想要的那样我不明白。 我使用了 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';
        }

已解决,谢谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    我确定如果您在用户名中允许空格,则只需一个空格字符就足够了,但为了安全起见,请使用与空格匹配的\s\n\r\t\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";
    }
    

    【讨论】:

    • 是的。例如:你使用了用户名 = hwnd - 没关系。您使用的用户名 = רביב - 没关系。但是如果您使用用户名 = hwרב - 不允许使用混合语言
    • 好的,我试过了,它不好它总是假的,即使我混合,即使我不混合,我尝试用 rubular.com 修复它,但没有成功你能明白为什么吗?并使用最新代码编辑您的答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我不想只允许英语,我不想在用户名上允许混合语言,例如英语和西班牙语,例如任何想法?
    猜你喜欢
    • 2017-01-05
    • 2015-08-07
    • 2012-03-27
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多