1. 程式人生 > >shell例項淺談之七檢測使用者輸入串的合法性

shell例項淺談之七檢測使用者輸入串的合法性

一、問題

要求使用者輸入的串由大小寫字母、數字組成,無標點、特殊符號和空格。

二、詳解

1、替換法

將輸入的串中非字母數字的內容刪除或替換成空後,若與原來輸入的相同則合法,否則不合法。

#!/bin/bash

isValidAlphaNumber()
{
    result="$(echo $1 | sed 's/[^[:alnum:]]//g')"   #替換非字母數字為空格
    #$()等價``,因此上句等價於result=`echo $1 | sed 's/[^[:alnum:]]//g'`
    #[:alnum:]等價於0-9A-Za-z中的一個字元,[[:alnum:]]是字母數字集,而[^[:alnum:]]表示除了所有字母數字外的任一字元
    if [ "$result" != "$1" ]
    then
        return 1        #novalid
    else 
        return 0        #valid
    fi
}

###########程式碼執行起始位置###############  
echo -n "Enter input:"    #強制不換行
read input                #讀取輸入

echo $input
if ! isValidAlphaNumber2 "$input"   #呼叫函式
then
    echo "invalide"
    exit 1
else
    echo "valide"
fi
exit 0

該方法為常用方法,判斷字串是否為數字也是採用替換法。

strIsNumber()
{
		if [ -n "$1" ]; then
				STR_TEMP=`echo "$1" | sed 's/[0-9]//g'`
				if [ -z "$STR_TEMP" ]; then
				    return 0
				fi
		fi
		return 1
}

2、順序判斷法

依次順序比較字串的每一個字元,效率比上述低一些。

#!/bin/bash

isValidAlphaNumber()
{
    tempstr=$1
    for((i=1; i<=${#tempstr}; i++))
    do
        if [[ `echo $tempstr | cut -c$i` != [a-zA-Z0-9] ]]
        #cut -c依次取字元,[[ ]]支援字串的模式匹配
        then
            return 1
        fi
    done
    return 0
}

###########程式碼執行起始位置###############  
echo -n "Enter input:"    #強制不換行
read input                #讀取輸入

echo $input
if ! isValidAlphaNumber "$input"   #呼叫函式
then
    echo "invalide"
    exit 1
else
    echo "valide"
fi
exit 0

三、總結

(1)sed可以完成文字檔案的替換、刪除、增加等操作,功能強大,因更多應用。

(2)上述兩個問題也會有更好的解決方案,可請大家留言,也可聯絡本人[email protected]


相關推薦

shell例項檢測使用者輸入合法性

一、問題 要求使用者輸入的串由大小寫字母、數字組成,無標點、特殊符號和空格。 二、詳解 1、替換法 將輸入的串中非字母數字的內容刪除或替換成空後,若與原來輸入的相同則合法,否則不合法。 #!/bin/bash isValidAlphaNumber() { r

shell例項檢測整數、浮點數和日期數的合法性

一、問題       實際工作中,經常會碰到對數值的檢測,在此將檢測整數、浮點數和日期的合法性綜合在一起,總結各種不同的檢測方法。特別是日期總結了shell處理日期非常好的方法,可以借鑑使用,每個函式都可以根據需要獨立提取出來。 二、詳解 (1)檢測輸入整數的合法性

shell例項九格式化輸出大數字

一、問題       格式化輸出大數字,使得輸出結果更清晰地看出數字的數量級。預設用逗號(可用-d指定整數的分隔符)分隔整數部分,用點號(可用-t指定整數與小數的分隔符)分隔整數與小數部分。如1123456789.012輸出為1,123,456,789.012。 二、詳

Python例項四遞迴求斐波那契、階乘、累加和

一、問題 指令碼遞迴求斐波那契、階乘和、累加和函式的執行。先在單執行緒中執行這三個函式,然後在多執行緒中做同樣的事,以說明多執行緒的好處。以及子類化threading執行緒模組的Thread類,靈活地來自定義執行緒物件。 二、解決 1、程式碼 #!/usr/bin/

Python介面(3):Python例項三Python與C/C++相互呼叫

一、問題      Python模組和C/C++的動態庫間相互呼叫在實際的應用中會有所涉及,在此作一總結。 二、Python呼叫C/C++ 1、Python呼叫C動態連結庫         Python呼叫C庫比較簡單,不經過任何封裝打

Python例項九使用本地socket檔案

       首先,socket的連線地址是一個檔案的路徑而不是一個包含服務地址和埠號的元組;第二,當socket關閉後,socket檔案不會被刪除,該檔案代表一個永久的socket連線,所以每次伺服器啟動時,都需要手動刪除該檔案。第三,address family需要使用AF_UNIX而不是AF_INET

Python例項五Python守護程序和指令碼單例執行

一、簡介      守護程序最重要的特性是後臺執行;它必須與其執行前的環境隔離開來,這些環境包括未關閉的檔案描述符、控制終端、會話和程序組、工作目錄以及檔案建立掩碼等;它可以在系統啟動時從啟動指令碼/etc/rc.d中啟動,可以由inetd守護程序啟動,也可以有作業規劃程

OSI層模型物理層

src 多模光纖 tex b- 物理量 osi 連線 ons 9.png 物理層的功能: 建立、維護、斷開物理連接,定義接口和介質,實現了比特流的傳輸。物理層所需要解決的問題: 信號、接口、介質一、信號

shell三for、while、until迴圈

一、簡介 Shell程式設計中迴圈命令用於特定條件下決定某些語句重複執行的控制方式,有三種常用的迴圈語句:for、while和until。while迴圈和for迴圈屬於“當型迴圈”,而until屬於“直到型迴圈”。迴圈控制符:break和continue控制流程轉向。

shell十一別名、列表及陣列

一、簡介 Shell中別名可以對命令進行重新命名,方便使用者記憶長命名和定製自己熟悉的工作環境;列表是一組命名以邏輯與、邏輯或的關係串在一起,實現指令碼程式的邏輯控制;陣列是一重點,涉及陣列的賦值、操作和字串的處理,以及利用陣列實現堆疊和二維陣列等資料結構的儲存。 二、

Qt二十一log調試日誌

gms 生成文件 _file__ ica 沒有 rest delet mar 排除 一、簡單介紹 近期因調試code時,想了解程序的流程,但苦於沒有一個簡易的日誌記錄,不停使用qDebug打印輸出,而終於提交代碼時得去多次刪除信息打印,有時還會出現新改動

非法外聯檢測技術的演變

非法外聯 違規外聯 手機外聯 usb共享 無線熱點 電話撥號 針對隔離內網,非法外聯因其危害巨大,一直都是網絡邊界完整性防護的重中之重。早期非法外聯主要是指以電話撥號為主的私自連接互聯網的行為,早期電話撥號還是非常方便的,如163撥號,263撥號等,只要有電話線,就可以隨時撥號上網,缺

JAVAEE企業級應用開發MVC 中的V-VIEW視圖

插入 第一次 開發 優點 就會 mil 是否 javaee 方便 Step1.情景概要 Hello,小夥伴們,好久不見,之前跟大家分享了三層架構與MVC思想,相信大家對於這兩塊內容有了相對清晰的個人認識了,既然我們講到了MVC,這裏我們接著這塊內容繼續往下深入,今天我們來看

OSI層模型

表現 以及 數據鏈路層 網絡服務 介質 包裝 斷點續傳 pop3 ip地址 OSI是由ISO(國際標準化組織)在網絡通信中創建的開放系統互聯模型,為降低網絡設計的復雜性將協議進行了分層設計。一、OSI七層模型的含義 OSI結構 含義 應用層 網絡服務於最終用戶

UART串列埠通訊(三)--字元與資料的轉換

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/solar_Lan/article/details/78093692 學串列埠通訊的應用主要是實現微控制器和電腦之間的資訊互發,可以用電腦控制微控制器的一些資訊,可以把微控制器的一些資訊狀況發給電腦

UART串列埠通訊(二)--暫存器設定

1.1 通訊的三種基本型別 常用的通訊通常可以分為單工、半雙工、全雙工通訊。 單工就是指只允許一方向另外一方傳送資訊,而另一方不能回傳資訊。比如我們的電視遙控器,我們的收音機廣播等,都是單工通訊技術。 半雙工是指資料可以在雙方之間相互傳播,但是同一時刻只能其中一方發給另外一方,

UART串列埠通訊(一)--基礎概述

通訊按照傳統的理解就是資訊的傳輸與交換。UART(Universal Asynchronous Receiver/Transmitter,即通用非同步收發器)序列通訊是微控制器最常用的一種通訊技術,通常用於微控制器和電腦之間以及微控制器和微控制器之間的通訊。 以下我們以STC98C52微控制器為

Qt四十八視窗下方彈出提示資訊

一、簡介       在專案中一般都會彈出新的子對話方塊顯示提示資訊,但對於一些因後臺資料變化引發的提示還是在視窗下方彈出提示資訊比較合理。點選按鈕彈出提示資訊,當滑鼠放在提示資訊對話方塊上時,暫停動畫可長時間檢視提示資訊。 二、詳解 1、程式碼 (1)fader

linux-centosrpm和rpmbuild

一、簡介             RPM(Red Hat Package Manager)是用於 Linux 分發版(distribution)的最常見的軟體包管理器。RPM包命名方式:name-version-release.architecture.rpm。RPM

Qt三十二二維碼條形碼解析

一、簡介         二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規律在平面(二維方向上)分佈的黑白相間的圖形記錄資料符號資訊的,其應用廣泛,如:產品防偽/溯源、廣告推送、網站連結、資料下載、商品交易、定位/導航、電子憑