Как различить URL-адрес и строку в javascript объекте - PullRequest
1 голос
/ 30 марта 2020

У меня есть объект, который содержит media_id с какой-то ссылкой, которая ведет на мою страницу экрана аудио, а вторая media_id содержит строку, которая идет на страницу видео экрана. Как я могу сказать между ними для навигации отправьте их на их конкретные c страниц. Мой код ниже:

API:

{
        "id": 602,
        "title": "Reflections on Africa",
     "media_id": "https://cdn.islamicmedia.com.au/site/2020/03/2019-11-18-Reflections-on-Africa-by-
    },
{
    "id": 595,
    "title": "Reflections on Africa ",
   ahmed-bassal/",
    "media_id": "8ZVwBwq2cTs",


},`

Мой код (предоставит больше кода, если вы хотите). Я знаю, что делаю что-то не так, пожалуйста поправьте меня

<TouchableOpacity
    onPress={() => {
      item.media_id === String
        ? this.props.navigation.navigate('Video', {
            id: item.id,
          })
        : this.props.navigation.navigate('Audio', {
            id: item.id,



          });
    }}>

Ответы [ 6 ]

1 голос
/ 31 марта 2020

Вы можете попытаться разобрать его, и если он потерпит неудачу, вы знаете, что это не URL! С преимуществом работы для любого типа протокола, а не только HTTP.

function isUrl(thing) {
    try {
        new URL(thing);
        return true;
    } catch (_) {
        return false;
    }
}

Тогда вы можете использовать его просто:

<TouchableOpacity
    onPress={() => {
      isUrl(item.media_id)
        ? this.props.navigation.navigate('Audio', {
            id: item.id,
          })
        : this.props.navigation.navigate('Video', {
            id: item.id,
          });
    }}>
1 голос
/ 30 марта 2020

Попробуйте с регулярным выражением

//arr is your API result
{this.state.arr.map((item, index) => {
  return (
    <TouchableOpacity
       onPress={() => {
         item.media_id.match("^https")
        ? this.props.navigation.navigate('Video', {
            id: item.id,
          })
        : this.props.navigation.navigate('Audio', {
            id: item.id,
          });
    />
  );
)}
1 голос
/ 30 марта 2020

Проверьте, начинается ли media_id с https, используя startsWith. Если оно начинается с https, то это url иначе id string.

const input = [{
    "id": 602,
    "title": "Reflections on Africa by Brother Ahmed Bassal",
    "media_id": "https://cdn.islamicmedia.com.au/site/2020/03/2019-11-18-Reflections-on-Africa-by-"
  },
  {
    "id": 595,
    "title": "Reflections on Africa by Brother Ahmed Bassal",
    "media_id": "8ZVwBwq2cTs",
  }
];

input.forEach(({
  media_id
}) => {
  if (media_id.startsWith('https')) {
    console.log('URL', media_id);
  } else {
    console.log('ID', media_id);
  }
});
1 голос
/ 30 марта 2020

Вы можете использовать startsWith, который является методом внутри любого прототипа String.

Попробуйте использовать это при проверке:

item["media_id"].startsWith("https://")
1 голос
/ 30 марта 2020

быстрое и простое решение - проверить, содержит ли ваша строка «https:» https://www.w3schools.com/jsref/jsref_search.asp

0 голосов
/ 30 марта 2020

Вы можете проверить подстроку как,

media_id.includes("https://")

или без SSL

media_id.includes("https://" | "http://")

Теперь, если она начинается с другой или содержит url. Вы можете дифференцировать.

Лучший способ это регулярное выражение

function validURL(str) {
  var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
    '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
    '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
    '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
    '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
    '(\\#[-a-z\\d_]*)?$','i'); // fragment locator
  return !!pattern.test(str);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...