2011-02-18 2 views
1

각 공백의 각면에 최소 3 자 (a-zA-Z 및 작은 따옴표 허용)를 만드는 방법을 만들려고합니다. 그러나 그것은 단지 첫 번째 공간에서만 가능합니다. 나머지는 아닙니다. 나는 preg_match_all()을 아무 소용이 없으므로, 내 질문/당신들에게 게시.preg_match (_all) 모든 공백 문자에 대한 규칙 사용

<?PHP 
    function validateSpaces($str) { 
    if (strpos($str, ' ') !== FALSE && !preg_match('/(([a-z\']{3,})([ ]{1})([a-z\']{3,}))/i', $str)) 
     return FALSE; 

    return TRUE; 
    } 

    echo validateSpaces('Hey There'); // Valid (correct) 
    echo validateSpaces('He There'); // Invalid (correct) 
    echo validateSpaces('Hey Ther e'); // Valid (incorrect) 
?> 

당신이 볼 수 있듯이 그들이해야처럼, 처음 두 예제가 작동되지만, 제 2 공간은 그것의 오른쪽에 한 문자를 가지고 있지만 두 번째는 유효성을 검사합니다. 그건 내가 원하는 것이 아니야.

도움이 필요하거나 도움을 주실 수 있도록 노력하겠습니다.

고맙습니다. Chris.

+1

정규 표현식이 내 강점 중 하나는 아닐지도 모릅니다. – eklundchristopher

+2

광산도 마찬가지입니다. 이 도구는 대단합니다. http://gskinner.com/RegExr/ – Emil

+0

저는 시나리오에서 긍정적 인 표정을 찾고 있다고 생각합니다. –

답변

3

마지막으로 수정, (그것과 일치하기 전에 트림 문자열) 우리가 한 칸 ONY이있는 경우에만 macth됩니다

 
^([a-z']{3,} ?)+$ 
+0

이렇게하면 여러 개의 공백이있을 수 있으며 초기 문제는 해결되지 않습니다. 그래도 감사합니다! – eklundchristopher

+0

그냥 하나 이상의 공백을 추가하십시오 위의 예제를 수정합니다 – MatejB

+0

당신이 제대로 코멘트를 읽지 못해 미안합니다 – MatejB

0

사용 preg_match_all()보다는 preg_match() 및 substr_count ($ str을, '')과 결과의 수를 비교는 모든 공간이

+0

"결과의 수"- $ matches 변수에 대해서만 이야기한다고 가정 할 수 있습니다. 이것이 사실이라면 더 많은 결과 항목을 반환하고 간단히 계산하여 substr_count 결과와 비교해야합니다. 그래도 감사합니다. – eklundchristopher

+0

@Chris : 올바른 캡처 그룹으로 해당 정규식을 쉽게 다시 작성할 수 있습니다. 그러면이 솔루션이 작동합니다. – kapa

2

당신은 공간과 수표에 문자열을 폭발 할 수 귀하의 정규 표현식 기준과 일치하는지 확인합니다 배열의 내용

하지 완벽한 솔루션 :

$temb=explode(' ', $str); 
$valid=true; 
foreach ($temb as $tt) { 
    if (strlen($tt)<3 || !{a preg_match for the right characters in $tt}) { 
    $valid=false; 
    break; 
    } 
} 
+0

문자열이 크면 큰 루프가됩니다! – MatejB

+0

나는 MatejB에 동의합니다. 이 특정 경우에는 그러나 그것은 아니지만 여전히 정규식 솔루션 (있는 경우) 선호합니다. – eklundchristopher

+0

@Chris : 맞습니다. 그것은 여전히 ​​최적화 될 수 있습니다 (루프 이후의 문자에 대해 preg_match를 수행하면 여전히 유효합니다). Mark의 솔루션은 훌륭하게 보입니다. 그러나 오늘 투표가 남았습니다. :) – kapa

0

이 방법에 대해 - 당신이 할 수 퍼포먼스가 문제가된다면 패턴을 하나로 결합하십시오. 나는 어려운 조건 논리의 수준 이상 읽고 찾을 :

function validate($value) 
{ 
    $ptn_a = '/(^|)[A-Za-z\']{0,2} /'; 
    $ptn_b = '/ [A-Za-z\']{0,2}($|)/'; 

    if (preg_match($ptn_a, $value)) 
    return false; 

    if (preg_match($ptn_b, $value)) 
    return false; 

    return true; 
} 

var_dump(validate('Hey There')); 
var_dump(validate('He There')); 
var_dump(validate('Hey Ther e')); 
0
function validate($string = '') 


{ 


    $regexp = '/([^\w]|^)([\w]{1,2})([^\w]|$)/'; 

    if (strlen(trim($string)) && !preg_match($regexp, $string)) { 
     return 'TRUE'; 
    } 

    return 'FALSE'; 


} 


print validate(' '); 
print "\n"; 
print validate('Hey There'); 
print "\n"; 
print validate('He There'); 
print "\n"; 
print validate('Hey '); 
print "\n"; 
print validate('Hey Ther e'); 
print "\n"; 
print validate('Hey Th ere'); 

이것은 또한 도움이 될 수 있습니다.