将字符串添加到表单文本的前缀

时间:2013-04-22 08:02:48

标签: php javascript forms

我正在尝试存储网址,我需要前缀为“http://”,所以如果访问者没有输入,我需要添加它,但如果他们输入它我不想要复制它。以前必须提出这个问题。也许我没找错?无论哪种方式,如果你能回答这个问题,你就是我渴望成为的那种人。

我想在PHP中这样做,但JS也可以。

编辑: 这就是我尝试添加JS但没有工作......

 <form name="urlField" onsubmit="window.location.href = document.getElementById('addressfield').value; return false;">
   <input type="text" name="address" id="addressfield" />
 </form>

以下是发布数据的接收端的PHP:

<?php
if (isset($_GET['success']) === true && empty($_GET['success']) === true) {
    echo '<img src="images/spacer.gif" border="0" width="270" height="1">Your links have been updated!';
} else {
if (empty($_POST) === false && empty($errors) === true) {   
    $update_data = array(
        'a1_url'    => $_POST['a1_url'],
        'a1_text'   => $_POST['a1_text'],
    );
    update_user($session_user_id, $update_data);
    header('Location: ../edit_mode.php');
    exit();
    } else if (empty($errors) === false) {
        echo output_errors($errors);
    }
?>

6 个答案:

答案 0 :(得分:2)

您可以使用一个简单的正则表达式来检查是否已指定URL的协议:

if (!preg_match('#^[a-zA-Z]+://#', $url)) {
    //No current protocol - add http
    $url = 'http://' . $url;
}

或在JS中:

if (!url.match(/^[a-zA-Z]+:\/\//)) {
    url = 'http://' + url;
}

这将允许ssh://localhosthttps://www.facebook.comftp://mydomain.com等。

正则表达式解释:

  • ^ - 字符串的开头必须在这里
  • [a-zA-Z]+ - 从a到z的字母,大写和小写重复1次或更多次
  • : - 一个小型:字符
  • \/\/// - 有问题的//个字符,但是使用反斜杠在javascript中进行了转义。

更新评论

<script type="text/javascript">
    function submitURLFieldForm() {
        var url = document.getElementById('addressfield').value;
        if (!url.match(/^[a-zA-Z]+:\/\//)) {
            url = 'http://' + url;
        }

        window.location.href = url; 
        return false;
    }
</script>
<form name="urlField" onsubmit="return submitURLFieldForm();"> URL<input type="text" name="address" /></form>

答案 1 :(得分:1)

试试这个:

var inputVal = $('#myInput').val();
inputVal = inputVal.substr(0, 8).search(/(http|https)(:\/\/)/,i) === 0
           ? 'http://' + inputVal
           : inputVal;

(添加了对HTTPS和不区分大小写的支持)

答案 2 :(得分:0)

最简单的方式( JavaScript 解决方案):

var visitorTyped = "example.com";
if (visitorTyped.indexOf("http://") === -1) {
   visitorTyped = "http://" + visitorTyped
}

答案 3 :(得分:0)

由于您要求您首选PHP:

创建一个新变量来保存网址,并对其进行检查。然后,您可以将此新变量分配给update_data数组中的a1_url项以存储

if (empty($_POST) === false && empty($errors) === true) {   

  $url = $_POST['a1_url'];
  if (strpos($url, 'http://') !== 0) {
    $url = 'http://' . $url
  }

  $update_data = array(
      'a1_url'    => $url,
      'a1_text'   => $_POST['a1_text'],
  );

  // the remainder of your code
} 

答案 4 :(得分:0)

您是否应该允许至少https,可能还有其他任何协议?

保留任何协议:

if (strpos($input, '://') === false) {
  $input = 'http://' . $input
}

仅允许所有协议的子集,默认为http

$allowedProtocol = array ( 'http', 'https' );
$urlParts = explode( '://', $input );
if (count($urlParts) === 1) {
    $input = 'http://' . $input
}elseif ( !in_array( $urlParts[0], $allowedProtocol ) ) {
    // error handling
}

答案 5 :(得分:0)

您可以使用本机PHP函数:

  

$ url =(parse_url($ url,PHP_URL_SCHEME)== NULL?&#39; http://&#39;:NULL)。 $网址;