2012-09-14 4 views
1

user_agent를 필터링하고 iPhone과 iPad를 구분하려고합니다. 사용자 에이전트 문자열을 읽습니다 : 지금 사용하고정규 표현식 : user_agent 문자열에 "a"가 있지만 "b"가 포함되어 있지 않습니다.

Mozilla/5.0(ipad U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10

정규 표현식은

(iphone|iPod|blackberry|android|windows+ce) 

(가) 나에게 대부분의 모바일 기기를 얻을 수 있으며, 고객은 행복입니다.

문자열에 ipad이 포함되어 있으면 일치하지 않길 바랍니다. 나는 이것을 한 시간 동안 고민해 왔으며 경험이 많은 도움을 얻을 때라고 생각했다.

답변

2

이 시도 : 팀에서

^(?!.*ipad).*(iphone|iPod|blackberry|android|windows\+ce) 
+0

땡땡 울림! 우승자가 있습니다. 고맙습니다! –

+0

- 편집 : 아, 쏴. 아니요 - ISAPI 필터에 연결했는데 실패했습니다. 문자열에 ipad와 iphone이 모두 포함되어 있으면 가져옵니다. 그것은 아이폰을 포함하지 않는 경우, 그냥 잘 ipad 필터. 그럼, 여전히 찾고 ... –

+0

@BillinKansasCity : 나는 따르고 있지 않다. 정규 표현식은 여기에서 OK입니다 (간과 한'+'앞에 백 슬래시를 추가해야했지만). 나는 ISAPI 필터가 어떻게 작동하는지 모른다. 대소 문자를 구분하지 않는 옵션을 켜야합니다. 그런 옵션이 없다면 정규 표현식의 처음에'(? i)'를 추가해보십시오. –

0

^(?!.*ipad).*(iphone|iPod) 제안이 완벽하게 잘 작동합니다. 비교하지만, 정규식은 400 %에게 CPU 요구 사항이 다음

1) 개의 개별 정규식

정규식 A) (iphone|ipod)

정규식 B) (ipad)

2 일 분열) 스크립트에서 A 및 B 결과에 대한 조건을 사용자의 필요에 맞게 수행하십시오.

이것은 여분의 작업이나 여분의 작업처럼 보일 수 있지만 하나의 정규식 안의 모든 것을 벼락치기보다 400 % 빠릅니다.