如何在Javascript中检查短语是否是回文?

时间:2017-03-25 16:39:51

标签: javascript

我已经编写了下面的代码来检查一个单词是否是回文,但我想知道如何检查一个短语是否也是一个。

public function index() {
if($this->session->userdata('is_logged_in')){
        $data = array();
        if ($this->input->is_ajax_request()) {
            /** this will handle datatable js ajax call * */
            /** get all datatable parameters * */
            $search = $this->input->get('search');/** search value for datatable  * */
            $offset = $this->input->get('start');/** offset value * */
            $limit = $this->input->get('length');/** limits for datatable (show entries) * */
            $order = $this->input->get('order');/** order by (column sorted ) * */
            $column = array('id', 'manufacturer');/**  set your data base column name here for sorting* */
            $orderColumn = isset($order[0]['column']) ? $column[$order[0]['column']] : 'parameter';
            $orderDirection = isset($order[0]['dir']) ? $order[0]['dir'] : 'asc';
            $ordrBy = $orderColumn . " " . $orderDirection;

            if (isset($search['value']) && !empty($search['value'])) {
                /** creat sql or call Model * */

                /** I am calling sql directly in controller for your answer 
                 * Please change your sql according to your table name
                 * */
                $sql = "SELECT * FROM TABLE_NAME WHERE column_name '%like%'" . $search['value'] . " order by " . $ordrBy . " limit $offset,$limit";
                $sql = "SELECT count(*) FROM TABLE_NAME WHERE column_name '%like%'" . $search['value'] . " order by " . $ordrBy;
                $result = $this->db->query($sql);
                $result2 = $this->db->query($sql2);
                $count = $result2->num_rows();
            } else {
                /**
                 * If no seach value avaible in datatable
                 */
                $sql = "SELECT * FROM TABLE_NAME  order by " . $ordrBy . " limit $offset,$limit";
                $sql2 = "SELECT * FROM TABLE_NAME  order by " . $ordrBy;
                $result = $this->db->query($sql);
                $result2 = $this->db->query($sql2);
                $count = $result2->num_rows();
            }
            /** create data to display in dataTable as you want **/    

            $data = array();
            if (!empty($result->result())) {
                foreach ($result->result() as $k => $v) {
                    $data[] = array(
                         'id' =>  $v['id'],
                         'manufacturer'=>$v['manufacturer'],                         
                         'actions' =>  "<a href=''><strong>Edit</strong></a>" 
                    );
                }
            }
            /**
             * draw,recordTotal,recordsFiltered is required for pagination and info.
             */
            $results = array(
                "draw" => $this->input->get('draw'),
                "recordsTotal" => count($data),
                "recordsFiltered" => $count,
                "data" => $data 
            );
            echo json_encode($results);
        } else {
            /** this will load by default with no data for datatable
             *  we will load data in table through datatable ajax call
             */
        $this->load->view('../template/header');
        $this->load->view('manufacturer',$data);
        $this->load->view('../template/footer');

        }
    }else{
        redirect('main/restricted');
    }
}

2 个答案:

答案 0 :(得分:0)

解决方案是删除空格。

function palindromeCheck(string) {
  string = string.replace(/\s+/g, '');
  const check = string.trim().split('').reverse().join('');
  return string === check;
}

答案 1 :(得分:0)

这非常低效。 SO上有大约一百个回文解决方案,您可以轻松搜索,但仅供参考:

function palindrome(s) {
  for (var i = 0, j = s.length-1; i < j; i++, j--) {
    if (!/\w/.test(s[i])) i++;
    else if (!/\w/.test(s[j])) j--;
    else if (s[i].toLowerCase() !== s[j].toLowerCase()) return false;
  }
  return true;
}