[^\u0000-\u007F]+
для любых символов, которые не включены в символы ASCII.
Например:
function isNonLatinCharacters(s) {
return /[^\u0000-\u007F]/.test(s);
}
console.log(isNonLatinCharacters("身分"));// Japanese
console.log(isNonLatinCharacters("测试"));// Chinese
console.log(isNonLatinCharacters("حمید"));// Persian
console.log(isNonLatinCharacters("테스트"));// Korean
console.log(isNonLatinCharacters("परीक्षण"));// Hindi
console.log(isNonLatinCharacters("מִבְחָן"));// Hebrew
Вот несколько отличных ссылок:
Google и Yahoo! оба предоставляют услуги геокодирования бесплатно. Можно вычислить расстояние с помощью формулы Haversine (реализованный в.NET или SQL). Оба сервиса позволят Вам сделать частичные поиски (почтовый индекс только, только город) и сообщат то, что точность их результатов (так, чтобы можно было исключить местоположения без значимой информации, хотя Yahoo! обеспечивает больше информации о точности, чем Google).
Вы не можете только использовать карты Google API, чтобы получить расстояния и отсортировать их на Вашей стороне?
Google Maps API бесполезна Вам из-за их условий использования. Однако Yahoo предлагает услугу REST для того, чтобы превратить адреса в координаты Long/Lat, которые Вы могли затем использовать для вычисления расстояний. Здесь.
Потребуйте, чтобы они ввели почтовый индекс, затем создали почтовый индекс отображения таблицы базы данных к парам широты/долготы (или найдите одно онлайн). Я не знаю, как это - где Вы работаете, но здесь, почтовый индекс может быть характерен для нескольких метров, так, чтобы было достаточно точно. Затем используйте этот метод для вычисления расстояния между двумя почтовыми индексами:
public static double distance(double lat1, double lon1, double lat2, double lon2, char unit)
{
double theta = lon1 - lon2;
double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) +
Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
dist = Math.Acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
if (unit == 'K')
{
dist = dist * 1.609344;
}
else if (unit == 'N')
{
dist = dist * 0.8684;
}
return (dist);
}
private static double deg2rad(double deg)
{
return (deg * Math.PI / 180.0);
}
private static double rad2deg(double rad)
{
return (rad / Math.PI * 180.0);
}
Преимущество использования Вашего собственного кода по сервису геокодирования состоит в том, что можно затем сделать набор более интересные вычисления против данных, а также хранящий материал вместе с ним в дб.
Я предложил бы заняться расследованиями, Google отображает API.
Это потребовало бы, чтобы у Вас было внешнее соединение (и чтобы это было в порядке для шунтирования данных по нему к веб-сервису), но это обеспечивает то, чего Вы требуете, а именно, расстояние путем просьбы маршрут между 2 точками и получения расстояния от него.
Одна вещь, которую мы сделали в моей компании, состоит в том, чтобы обмануть и использовать широту/долготу почтового индекса (Примерно центр области почтового индекса). Это не прекрасно, но это достаточно близко для тех, находят меня x в n милях y типов поисков. Это особенно полезно, когда адреса не могут быть распознаны услугами по уборке адреса.
В какой-то момент я столкнулся со свободным почтовым индексом к справочной таблице широты/долготы для использования в этом приближении. Я сожалею, что у меня нет ссылки на это больше.
Проверьте этот веб-сайт: http://geocoder.us/help/utility.shtml
Можно обработать записи, 1 в 15 секунд как это: http://geocoder.us/service/distance?zip1=95472&zip2=94305
У них также есть сервис подписки без ограничения по времени
Кто-то еще уже сделал это в Ненормальной Логике (редактирование: опечатка). Они используют Google Maps API с Большой круговой формулой. Я не думаю, что трудно реализовать.
Обновление: Практически, только необходимо получить координаты от любимого поставщика, затем сделать вычисление с кодом. Можно предварительно загрузить координаты магазинов, когда пользователи обеспечивают свое местоположение - можно даже использовать это для проверки. Затем когда запрос выполнен, Вы можете только поиск местоположение клиента.