Bir benziyor regex, kodlama ve karakterler

4 Cevap php

İlk olarak, kısa bir örnek, en bu "/ [0-9] {2} ° /" regex ve bu metni "24 º" var diyelim. Metin ... obviusly, maç olmayacak (?) Gerçekten, bu yazı bağlıdır.

İşte benim sorunum, ben kullanıcı kullandığı chars hangi kontrole sahip, bu yüzden yok, ben regex bütün olasılıkları kapsayacak gerekir /[0-9]{2}[°º]/, hatta daha iyi, metin ben sadece karakter vardır sağlamak m bekliyor °. Ama sadece regex çalışmaz aksi bilinmeyen karakter çıkarmak değil, bunun gibi görünüyor karakter onu değiştirmek gerekiyor ve ben bekliyorum. Ben haritalar biraz fonksiyonu ile bu yapmış "ne bekliyoruz" için "gibi" ve bunu değiştirmek, sorun ben tüm olasılıkları örtülü değil,, örneğin, bugün bir yeni bulunan "-", şimdi biz Sadece lateks = D - -- ---, serin gibi üçü, ama regex işe yaramadı var.

Herkes bu çözmek nasıl biliyor mu?

4 Cevap

Ne yazık ki PHP. ASP.NET bu gibi şeyler kapak unicode karakter sınıfları vardır, fakat here Gördüğünüz gibi,: Yani çok kapsar. Ayrıca değil gibi PHP zaten yardımcı olmuyor. :)

PHP size en yaygın karakter setlerini seçerek ve bunları kullanarak sınırlı olacak.

This should help: http://unicode.org/charts/charindex.html

Sadece bir derece simgesi vardır. Benzer bir şey kullanarak doğru değildir. Derece Fahrenheit ve santigrat için semboller de vardır. Eksi işaretleri ton maalesef vardır.

Orada bir normal ifadede bir "benzer bir görünüm" ile karakterler için hiçbir yolu yoktur, yani temelde yapamazsın.

Belirli bir karakter için, en yaygın hatalardan bazılarını sıralayalım olabilir ki, Unicode şartname ile şans olabilir, ama hiçbir garantisi var. Derece işareti durumunda, Unicode kod grafik dört benzer karakterler (\ u02da, \ u030a, \ u2070 ve \ u2218), ancak sorunlu karakteri, erkeksi sıra göstergesini listeler.

Düzenli ifade gerçekten kabul etmek istediğiniz tüm karakterleri listelemek gerekir. Önceden dize'nın kodlamasını bilmiyorsanız eğer, PHP / u değiştirici kullanarak UTF-8 olmak için düzenli ifade belirtebilirsiniz: "/[0-9]{2}[°º]/u" Sonra kabul etmek istediğiniz tüm Unicode karakterleri içerebilir karakter sınıfında. Ayrıca üzerinde regex kullanarak önce UTF-8 için tabi dizeyi dönüştürmek gerekir.

Tamam, temp çekmeye arıyorsanız eğer muhtemelen ilk bir kaç şeyler değişiyor ile başlamak gerekir.

sıcaklıklar sizin için daha doğru olabilir bu yüzden [0-9]{1,3} (ve birisi bir dört basamaklı bir sıcaklığa koymak aslında hala hayatta ise o zaman hepimiz mahkumdur!) 1 ila 3 basamak gelebilir.

Şimdi derece işaretler öğrendim gibi zor bir parçasıdır. Eğer kullanıcı kontrol edemiyorsanız (daha üzücü), sadece sonraki gelirse indirebiliriz?

[0-9]{1,3}.

Sen dize veya sonunda başlangıcı gibi ele biraz pozisyonda da olsa ilk bölümünü artırma gerekebilir.

Ayrıca istemediğiniz tüm normal karakterleri çıkarmak olabilir.

[0-9]{1,3}[^a-zA-Z]

İşte tüm noktalama işaretleri (tek olsa) almak olacaktır.