2016-10-13 2 views
0

내 대답은 거의이 같은 수 있습니다 : Pregmatch for at least 3 letters and for minus and apostrophe정규식 및 아포스트로피

그래서, 나도 이름 확인을위한 정규식이 필요합니다. 하지만 내 규칙은 약간 다릅니다.

  • 은 문자로 시작해야합니다.
  • 숫자가없고 영숫자는 없습니다.
  • 에는 3 자 이상의 글자가 있어야하며 (이름에도 연속적으로 ... anywere이 아님) 최대 20 자이어야합니다.
  • 은 하나의 아포스트로피 (') 만 허용하거나 아무도 사용할 수 없습니다. 사용 가능한 유일한 특수 문자는 ... (필수는 아니며 anywere입니다). 당신이 전을 위해 아포스트로피

    을 넣어 문제를 나던 :

    디부 AMICO => 접수해야합니다
    미코 '=> 더 디부'AMICO => 더 'oneil => 더 dell'amore => 예 미코 => 예 킹콩 => 예 IO => 더 io9 => 없다 no
    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> 
    

    가 어떻게 하나의 문자열로 모든 것을 결합 할 수 있습니다 : => 지금까지 아무

는이 코드가 없다? 미리 감사드립니다.

+0

궁금 해요 : 누군가의 이름에 대한 이유 등 엄격한 검증? 전자 메일이나 전화 번호와 같은 것은 이해할 수 있지만 규칙이 다른 다양한 문화권의 이름과 모든 것에 관해서는 특정 문자 집합을 수락하는 것이 더 합리적이지 않습니까? – maiorano84

+0

@ maiorano84는 사용자가 양식에 로그온 한 후에 발생하는 수동 작업을 간소화합니다. 누군가의 이름을 향한 인종 차별주의는 없습니다. :) 그러나 당신이 할 제안이 있다면 기꺼이 받아들입니다. – Chuby

+0

개인적으로? 나는 문자, 공백, 대시 및 아포스트로피로만 제한합니다. 나는 사용자가'm'gorpkplzik'과 같은 것을 넣는 것에 너무 신경 쓰지 않을 것이다. 내가 아는 한, 누군가의 부모님이 계단 아래로 키보드를 던지면서 이름을 지을 수도 있습니다. 유효한 정보를 넣으려면 사용자에게 신뢰를 위임해야한다고 생각합니다. 나는 다음과 같이 제안 할 것이다.'/^(?.*[a-z]{3})[a-z0-9\- \ 'àèéòò] + $/i'. 적어도 3 개의 연속 된 글자가 있는지 확인해야합니다. – maiorano84

답변

0

네거티브 미리보기를 사용하면 문자열이 ' 공백으로 시작하지 않거나 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"; 
} 
+0

if (! preg_match ("/ (?! . *? '.)?^[^]')^[A-Za-z | àèéìòù '] {3,20} $/i ", $ nome)) {$ error [] ='Inserisci un nome valido! ';} 아포스트로피 e 공백으로 작동하지 않습니다 ... 그래서 이름 d' d'ico는 오류를 보여줍니다 !!! 어쨌든 당신을 감사드립니다! – Chuby

+0

'eval.in'을 업데이트하여 사용중인 이름을 표시 할 수 있습니까? 또한 왜'|'가 당신의 원래의 문자 클래스에 있었는지 모르겠지만, 나는 그것을 떠났다. 문제가 될 수있다. (당신의 설명은 결코 언급하지 않았다.) – chris85

+0

잘못된 배열 일 수 있습니까? 나는 왜 그것이 작동하지 않는지 이해하지 못한다 !! 나는 하루 종일 그것을 보냈다. – Chuby

관련 문제