2014-03-14 2 views
0

그래서 전화 번호를 입력하는 양식의 HTML 필드가 있습니다. 그것은() 또는 -를 사용할 때 올바르게 검증합니다. 그러나 555 123 4567이라고 말하면 555를 반환합니다. 언제나 그렇듯이 도움을 주시면 감사하겠습니다.regex는 전화 번호의 유효성을 검사하지만 perl을 사용하여 공백을 잘라냅니다.

여기에 내 코드 당신이 지나치게 복잡한 모양을 사용하는 정규식

my $userName=param("userName"); 
my $password=param("password"); 
my $phoneNumber=param("phoneNumber"); 
my $email=param("email"); 
my $onLoad=param("onLoad"); 

my $userNameReg = "[a-zA-Z0-9_]+"; 
my $passwordReg = "([a-zA-Z]*)([A-Z]+)([0-9]+)"; 
my $phoneNumberReg = "((\(?)([2-9]{1}[0-9]{2})(\/|-|\)|\s)?([2-9]{1}[0-9]{2})(\/|-|\s)?([0-9]{4}))"; 
my $emailReg = "([a-zA-Z0-9_]{2,})(@)([a-zA-Z0-9_]{2,})(.)(com|COM)"; 


if ($onLoad !=1) 
{ 
@controlValue = ($userName, $password, $phoneNumber, $email); 
@regex = ($userNameReg, $passwordReg, $phoneNumberReg, $emailReg); 
@validated; 

for ($i=0; $i<4; $i++) 
{ 
    $retVal= validatecontrols ($controlValue[$i], $regex[$i]); 
    if ($retVal) 
    { 
     $count++; 
    } 
    if (!$retVal) 
    { 
     $validated[$i]="*" 
    }   
} 

sub validatecontrols 
{  
    my $ctrlVal = shift(); 
    my $regexVal = shift(); 
    if ($ctrlVal =~ /^$regexVal$/) 
    { 
     return 1; 
    } 

    return 0; 
} 
} 

*html code is here* 

답변

1

입니다. 거기에 많은 그룹을 포함하고 있지만, 수직 막대를 사용하여 "OR"문을 정의 할 때 주로 사용하는 느낌이 들었습니다. 단일 문자 만 선택하는 경우이 목적으로 대괄호를 사용하는 것이 일반적으로 훨씬 쉽습니다. 또한 공백 문자 (탭과 줄 바꿈 문자)와 실제로 일치하므로 보통 공백에는 \s을 사용하는 것은 좋지 않습니다. 특정 지지대에서 작업 할 수 있도록

(?:\(?[2-9]\d{2}\)?[-\/ ]?)?[2-9]\d{2}[-\/ ]?\d{4}

2

나는이 과제의 일부임을 깨닫게 : 어쩌면 이런 일을하려고합니다. 그러나 데이터 유효성 검사를 추상화하려는 시도는 정직하게 일을 지저분하고 어렵게 만듭니다. 그것은 또한 실제로 최상의 선택이 아닌 정규식 테스트에 당신을 묶어줍니다. 이미 말했듯이 전자 메일 검증은 모듈을 통해 수행되어야합니다.

또한 전화 확인을 위해 더 쉬운 해결책은 번호가 아닌 것을 제거한 다음 유효성 검사 테스트를 수행하는 것입니다. 아래 코드는 제가 이야기하는 것을 보여줍니다 :

my $userName = param("userName"); 
my $password = param("password"); 
my $phoneNumber = param("phoneNumber"); 
my $email = param("email"); 
my $onLoad = param("onLoad"); 

my $error = 0; 

if ($onLoad !=1) 
{ 
    if ($username !~ /^[a-zA-Z0-9_]+$/) { 
     $username = '*'; 
     $error++; 
    } 

    if ($password !~ /^[a-zA-Z]*[A-Z]+[0-9]+$/) { 
     $password = '*'; 
     $error++; 
    } 

    (my $phoneNumOnly = $phoneNumber) =~ s/\D//g; 
    if ($phoneNumOnly !~ /^1?[2-9]{1}\d{2}[2-9]{1}\d{6}$/) { 
     $phoneNumber = '*'; 
     $error++; 
    } 

    if ($email !~ /^\w{2,}\@\w{2,}\.com$/i) { 
     $email = '*'; 
     $error++; 
    } 
} 

*html code is here* 
관련 문제