2017-03-18 2 views
0

항상 preg_match 기능을 사용했습니다.내 regelur 표현에 대해 확실하지 않습니다.

나는 입력이 a-z, A-Z, 0-9, @#&-_.,과 일치하도록하고 싶습니다. !이 입력에 있으면 false를 반환해야합니다.

내가 지금까지 가지고있는 것.

$string = "String-20"; 
return (preg_match("/[a-z][A-Z][0-9][@#&-_.,]/i", $string)) ? true : false; 

이것은 true을 반환해야합니다.

그러나 반환 값은 false입니다.

+0

글쎄, 당신의 정규식은 4 글자와 일치합니다 : 2 글자, 그리고 숫자와 대문자를 포함한 몇 글자. '/^[a-zA-Z0-9 @ # & _., -] + $ /' –

답변

2

그런 것들을 그렇게 부수기보다는 하나의 세트로 갖고 싶을 것입니다. 귀하의 패턴은 "aA0 @"와 같은 문자열과 일치합니다.

"한 문자 az, 한 AZ, 한 개의 0-9, 그리고이 특수 문자 중 하나"라고 말하면서 실제로 원하는 것은 "임의의 숫자 이러한 특정 문자의 "

^와 $는 문자열의 시작과 끝을 의미하므로 이것이 당신이 원하는 것을해야한다고 생각합니다. &-_ 다음과 같은 선언 한 2 개 문자, 다음 숫자와 대문자를 포함한 일부 문자 :

preg_match('/^[[email protected]#&\-_.,]*$/i', $string) 
+0

멋진 묘사가 필요합니다. 하지만 내가 A - Z를 제거하고 문자열에 대문자가있을 때 여전히 진실이라고 말합니다. – LenapCapo

+0

예, 처음 대답이 완전히 잘못되었으므로 편집을 시도하십시오 <3 –

+1

또한? true : 거짓은 일종의 중복입니다. preg_match ('/^[a-z0-9 @ # & -_.,] * $/i', $ string); –

2

귀하의 정규식 (preg_match부분 일치를 찾을 수) 문자열 내에서 4 자 청크 (들) 어디 일치 범위 :

enter image description here

사용

/^[[email protected]#&_.,-]+$/i 

또는 (여기부터 \w[a-zA-Z0-9_] 일치합니다) : 빈 문자열이 허용되면

/^[\[email protected]#&.,-]+$/ 

, * (0 개 이상 발생)로 + (하나 이상의 발생)를 대체합니다.

앵커 ^ 앵커는 문자열 시작 부분에서 엔진이 일치하기 시작하고 $ 앵커가 패턴이 문자열 끝까지 일치하는지 확인합니다. 문자 클래스 끝의 하이픈은 - 문자로 구문 분석됩니다.

+0

하이픈'- 'whithin 문자 클래스'[]'는 이스케이프 된'\ -'또는 마지막 문자가 아닌 한 범위의 특별한 의미를가집니다. –