繁体   English   中英

正则表达式和撇号

[英]regex and apostrophe

我的答案几乎是这样的: Pregmatch至少要有3个字母,并且要有减号和撇号

因此,我也需要一个正则表达式来进行名称验证。 但是我的规则有些不同:

  • 必须以字母开头;
  • 没有数字,没有字母数字;
  • 必须至少包含三个字母(名称中还不仅要连续...也要连续)并且最多20个字母;
  • 只能接受一个撇号(')或其他任何一个-这些是唯一可以使用的特殊字符...(不是强制性的,名称中也没有。) 放在撇号的位置都没关系

    例如:

    d'amico =>必须被接受;
    d'amico'=>否d'amico =>否'oneil =>否dell'amore =>是damico =>是金刚=>是io =>否io9 =>否
    8888 =>没有aaa +++? =>否

到目前为止,我有以下代码:

<?php
...
    // Array errori
    $error = array(); // o $error = []; se hai una versione di php recente

    // Controllo il Nome Utente
    if(trim($nome) == ''){
        $error[] = 'Campo nome non compilato'; }

    if (ctype_alnum($nome)) 
        {$error[] = 'Se vuoi modificare il campo nome, assicurati che lo 
             stesso non contenga numeri al suo interno!'; }  

    if(strlen($nome) < 3 || strlen($nome) > 20){
        $error[] = 'Il campo nome deve contenere minimo 3 caratteri e massimo 20 caratteri'; }

    if (!preg_match("/^([A-Za-z|àèéìòù][A-Za-z'-]*?){3,}$/", $nome)) {
        $error[] = 'Il campo nome contiene caratteri non ammessi'; } 

...

?>

<html>...

<?php 
      if(!empty($error)){
         echo  '<center>';
         echo implode('<br/>', $error);
        echo  '</center>';
      }
   ?>

...
</html>

如何将所有内容组合成一个字符串? 先感谢您!

使用负数前瞻,可以断言字符串不是以' ,空格开头或包含2个(或更多)单引号。 然后,您可以使用允许的字符列表测试字符串长度在3到20个字符之间。

(?!(.*?'.*?'|^[' ]))^[A-Za-z|àèéìòù ']{3,20}$

正则表达式演示: https : //regex101.com/r/QANVBo/1

PHP演示: https : //eval.in/659769

PHP用法:

$array = array("d'amico", "dell'amore", "damico", "king kong", "io", "io9", "8888", "aaa+++?", "d'amico'", "d''amico", "'oneil");
foreach ($array as $term ) {
     if(preg_match("/(?!(.*?'.*?'|^[' ]))^[A-Za-z|àèéìòù ']{3,20}$/", $term)) {
          echo 'Matches:';
     } else {
          echo 'No Match:';
     }
     echo $term . "\n";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM