user2905791
user2905791

Reputation: 17

If, Or, while Not.... Javascript help needed

Hi folks I was curious if someone could help me out. I don't usually post on here but I have exhausted all my efforts and can't figure this out. I have this code here

function insertVideo(link)
{
if (link)
    {
    if(link.substring(0,29)!="http://www.youtube.com/watch?"){
        alert("You did not enter a valid URL!\r\nPlease try again.");
        return false;
        }
    else{
        link = link.replace(/watch\?/,"").replace(/\=/,"/");
        }
    var editpane = document.frmPost.addesc;
    var linkcode = "[EMBED]" + link + "[/EMBED]";

    editpane.focus();
    /*if (document.selection)
    {
        document.selection.createRange().text = linkcode;
    }
    else*/
    if (editpane.selectionStart || editpane.selectionStart == '0')
        {
        var selstart = editpane.selectionStart;
        var selend = editpane.selectionEnd;

        editpane.value = editpane.value.substring(0, selstart) + linkcode + editpane.value.substring(selend);
        editpane.selectionStart = selstart + linkcode.length;
        editpane.selectionEnd = editpane.selectionStart;
        }
    else
        {
        editpane.value = editpane.value + linkcode;
        }

    editpane.focus();
    }
}

The problem I am having is when the user trys top post a youtube video with https in the address.

I understand that if I change

{
if(link.substring(0,29)!="http://www.youtube.com/watch?"){
    alert("You did not enter a valid URL!\r\nPlease try again.");
    return false;
    }

to

{
if(link.substring(0,30)!="https://www.youtube.com/watch?"){
    alert("You did not enter a valid URL!\r\nPlease try again.");
    return false;
    }

It works. But then when the user enters the http address without the https it no longer works. I figured I could combine the statement with an OR, but this doesnt work either, I had

 if(link.substring(0,29)!="http://www.youtube.com/watch?" || link.substring(0,30)!="https://www.youtube.com/watch?"){
    alert("You did not enter a valid URL!\r\nPlease try again.");
    return false;
    }
else{
    link = link.replace(/watch\?/,"").replace(/\=/,"/");
    }

So basically I need it to work in both situations (https and http) not just one or the other. I am stumped, Im no pro with javascript so I sure its a minor error but I have spent far too much time trying to figure this out on my own. Please help if you can. Thanks!

Upvotes: 0

Views: 85

Answers (1)

Qantas 94 Heavy
Qantas 94 Heavy

Reputation: 16020

It's as simple as changing the OR (||) to an boolean AND (&&).

if (link.substring(0,29) !== "http://www.youtube.com/watch?" && link.substring(0,30) !== "https://www.youtube.com/watch?") {
    alert("You did not enter a valid URL!\r\nPlease try again.");
    return false;
}
// the else is unnecessary
// else {
link = link.replace(/watch\?/,"").replace(/\=/,"/");
// }

This works as in your original code, if your URL is http://, it will fail the https:// check (or vice versa), making the conditional true, therefore running your failure code. Changing it to && fixes it as the URL is now required to fail both tests to be invalid.

Just a little note: unless you're doing it deliberately (or in other special circumstances), you should use the === and !== forms of equality testing (instead of == and !=), as these fail automatically if they are of different types instead of converting the types implicitly.

Upvotes: 1

Related Questions