2013-05-30 1 views
2

다음 정규식을 사용하여 사용자 이름 (등록 양식의 입력 유형 텍스트)의 유효성을 검사하여 사용자 이름에 영숫자, 점, 대시 또는 밑줄 만 포함되도록합니다. 내가 인스턴스 % 또는 번호 텍스트 필드에 또는 @ 입력하면PHP 정규식 앰퍼샌드 문제

if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',$my_name)) { echo 'no_valid'; } 

내가 제대로 다시는 유효한 사용자 이름, 또한 유효한 문자 아니다 오류 메시지가 (.-_) 허용됩니다, 그것은 보인다 있도록 내가 & 또는 +를 입력 할 때까지 잘 작동하려면 preg_match를 사용하여 이전에 이미 제외했던 잘못된 문자를 입력 할 수 있습니다.

아무도 왜 이런 일이 발생하고 어떻게이 문제를 극복 할 수 있습니까?

+0

나는 코드를 시험해 보았고 제대로 작동합니다. –

+0

$ my_name은 어떻게 설정됩니까? 즉,'index.php? name = bob & x'는'bob'으로 이름을 부여합니다. 5 문자 이상의 문자열에 최소 길이 즉'/^[a-zA-Z0-9 \ ._ \ -] {5,} $ /'를 추가 할 수 있습니다. – Waygood

+0

미안합니다. PHP는 입력 형식의 사용자 이름 필드의 keyup 이벤트에 대한 아약스 게시물에 의해 regex. 이것이 당신을위한 부가 가치있는 정보인지 나는 모른다. – AlexCode

답변

5

문제가 다른 곳에서 발생했습니다. 귀하의 표현이 정확합니다. 나는 PHP로 테스트했다. '&'문자가 발생하기 때문에 내 생각에 데이터가 보내기 전에 URL 안전 문자로 변환되지 않습니다. JS에서 encodeURI() 함수를 사용해보십시오.

+0

+ +1도 생각하지만 (코멘트를 참조하십시오) 정규 표현식에 없기 때문에 + (공백)을 설명하지 않습니다 – Waygood

+0

URL 요청이 있기 전에 언급했듯이 작동하지 않았고 아약스 게시물을 사용합니다. 그냥 문자열로 사용자 이름을 전달하므로 encodeURI()에 대한 필요성이 없다고 생각합니다. 제가 틀렸다면 수정하십시오. – AlexCode

+0

나는 그것을 풀었다. 그러나 나는 아직도 설명이 필요하다, 너 또는 누군가 다른 사람이 나에게 줄 수 있으면 나는 그것을 감사 할 것이다. 문제는 아약스 게시물 데이터에있었습니다. '= my_name'+ my_name' 지금 나는 그것을 변경 : '데이터 : {my_name : my_name}' 을하고 그것의 '데이터 : 사용자 이름을 게시하기 전에 나는 이것이 개월 근무,이 줄을했다 일. 아무도 왜 내 데이터를 설명 할 수 있을까? & data + 'my_name ='+ my_name' 대신'data : {my_name : my_name} ' – AlexCode

-1
if (!preg_match('/^[a-zA-Z0-9\.\_-]+$/',urldecode($my_name))) { echo 'no_valid'; } 
+0

그것은 작동하지 않는다. – AlexCode