runoob js第八天

JavaScript 表單驗(yàn)證

JavaScript 表單驗(yàn)證
avaScript 可用來(lái)在數(shù)據(jù)被送往服務(wù)器前對(duì) HTML 表單中的這些輸入數(shù)據(jù)進(jìn)行驗(yàn)證。
表單數(shù)據(jù)經(jīng)常需要使用 JavaScript 來(lái)驗(yàn)證其正確性:

  • 驗(yàn)證表單數(shù)據(jù)是否為空鸵闪?
  • 驗(yàn)證輸入是否是一個(gè)正確的email地址靶擦?
  • 驗(yàn)證日期是否輸入正確坷襟?
  • 驗(yàn)證表單輸入內(nèi)容是否為數(shù)字型构蹬?
    必填(或必選)項(xiàng)目
    下面的函數(shù)用來(lái)檢查用戶是否已填寫(xiě)表單中的必填(或必選)項(xiàng)目溃蔫。假如必填或必選項(xiàng)為空皆疹,那么警告框會(huì)彈出,并且函數(shù)的返回值為 false膀曾,否則函數(shù)的返回值則為 true(意味著數(shù)據(jù)沒(méi)有問(wèn)題)
function validateForm()
{
  var x=document.forms["myForm"]["fname"].value;
  if (x==null || x=="")
  {
    alert("姓必須填寫(xiě)");
    return false;
  }
}
以上函數(shù)在 form 表單提交時(shí)被調(diào)用
<form name="myForm" action="demo-form.php" onsubmit="return validateForm()" method="post">
姓: <input type="text" name="fname">
<input type="submit" value="提交">
</form>

E-mail 驗(yàn)證
輸入的數(shù)據(jù)必須包含 @ 符號(hào)和點(diǎn)號(hào)(.)县爬。同時(shí),@ 不可以是郵件地址的首字符添谊,并且 @ 之后需有至少一個(gè)點(diǎn)號(hào)

function validateForm(){
  var x=document.forms["myForm"]["email"].value;
  var atpos=x.indexOf("@");
  var dotpos=x.lastIndexOf(".");
  if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
    alert("不是一個(gè)有效的 e-mail 地址");
    return false;
  }
}
下面是連同 HTML 表單的完整代碼
<form name="myForm" action="demo-form.php" onsubmit="return validateForm();" method="post">
    Email: <input type="text" name="email">
    <input type="submit" value="提交">
</form>

JavaScript 驗(yàn)證 API

約束驗(yàn)證 DOM 方法

checkValidity() 
如果 input 元素中的數(shù)據(jù)是合法的返回 true,否則返回 false察迟。

setCustomValidity() 
設(shè)置 input 元素的 validationMessage 屬性斩狱,用于自定義錯(cuò)誤提示信息的方法。
使用 setCustomValidity 設(shè)置了自定義提示后扎瓶,validity.customError 就會(huì)變成true所踊,則 checkValidity 總是會(huì)返回false。如果要重新判斷需要取消自定義提示概荷,方式如下:
setCustomValidity('') 
setCustomValidity(null) 
setCustomValidity(undefined)

以下實(shí)例如果輸入信息不合法秕岛,則返回錯(cuò)誤信息

checkValidity() 方法
<input id="id1" type="number" min="100" max="300" required>
<button onclick="myFunction()">驗(yàn)證</button>
<p id="demo"></p>

<script>
function myFunction() {
    var inpObj = document.getElementById("id1");
    if (inpObj.checkValidity() == false) {
 document.getElementById("demo").innerHTML = inpObj.validationMessage;
    }
}
</script>

約束驗(yàn)證 DOM 屬性

validity            布爾屬性值,返回 input 輸入值是否合法
validationMessage   瀏覽器錯(cuò)誤提示信息
willValidate        指定 input 是否需要驗(yàn)證

Validity 屬性
input 元素的 validity 屬性包含一系列關(guān)于 validity 數(shù)據(jù)屬性

customError     設(shè)置為 true, 如果設(shè)置了自定義的 validity 信息。
patternMismatch 設(shè)置為 true, 如果元素的值不匹配它的模式屬性继薛。
rangeOverflow   設(shè)置為 true, 如果元素的值大于設(shè)置的最大值修壕。
rangeUnderflow  設(shè)置為 true, 如果元素的值小于它的最小值。
stepMismatch    設(shè)置為 true, 如果元素的值不是按照規(guī)定的 step 屬性設(shè)置遏考。
tooLong         設(shè)置為 true, 如果元素的值超過(guò)了 maxLength 屬性設(shè)置的長(zhǎng)度慈鸠。
typeMismatch    設(shè)置為 true, 如果元素的值不是預(yù)期相匹配的類(lèi)型。
valueMissing    設(shè)置為 true灌具,如果元素 (required 屬性) 沒(méi)有值青团。
valid           設(shè)置為 true,如果元素的值是合法的咖楣。

如果輸入的值大于 100督笆,顯示一個(gè)信息
如果輸入的值小于 100,顯示一個(gè)信息

<input id="id1" type="number" min="100" required>
<button onclick="myFunction()">OK</button>
<p id="demo"></p>
 
<script>
function myFunction() {
    var txt = "";
    var inpObj = document.getElementById("id1");
    if(!isNumeric(inpObj.value)) {
        txt = "你輸入的不是數(shù)字";
    } else if (inpObj.validity.rangeUnderflow) {
        txt = "輸入的值太小了";
    } else {
        txt = "輸入正確";
    }    document.getElementById("demo").innerHTML = txt;
}
// 判斷輸入是否為數(shù)字
function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}
</script>

JavaScript 保留關(guān)鍵字

一些標(biāo)識(shí)符是保留關(guān)鍵字诱贿,不能用作變量名或函數(shù)名
JavaScript 標(biāo)準(zhǔn)
ECMAScript 5(ES5胖腾,2009 年發(fā)布),是 JavaScript 最新的官方版本
JavaScript 保留關(guān)鍵字
Javascript 的保留關(guān)鍵字不可以用作變量瘪松、標(biāo)簽或者函數(shù)名咸作。有些保留關(guān)鍵字是作為 Javascript 以后擴(kuò)展使用

abstract  arguments  boolean     break     byte
case      catch      char        class*   const
continue  debugger   default     delete   do
double    else       enum*       eval     export*
extends*  false      final       finally  float
for       function   goto        if       implements
import*   in         instanceof  int      interface
let       long       native      new      null
package   private    protected   public   return
short     static     super*      switch   synchronized
this      throw      throws      transient  true
try       typeof     var         void       volatile
while     with       yield
* 標(biāo)記的關(guān)鍵字是 ECMAScript5 中新添加的。        

JavaScript 對(duì)象宵睦、屬性和方法
避免使用 JavaScript 內(nèi)置的對(duì)象记罚、屬性和方法的名稱作為 Javascript 的變量或函數(shù)名

Array     Date     eval     function      hasOwnProperty
Infinity  isFinite isNaN    isPrototypeOf length
Math      NaN      name     Number        Object
prototype String   toString undefined     valueOf

Java 保留關(guān)鍵字
避免使用一些 Java 對(duì)象和屬性作為 JavaScript 標(biāo)識(shí)符

getClass    java       JavaArray    
javaClass   JavaObject JavaPackage

Windows 保留關(guān)鍵字
在 HTML 中,必須(為了可移植性壳嚎,您也應(yīng)該這么做)避免使用 HTML 和 Windows 對(duì)象和屬性的名稱作為 Javascript 的變量及函數(shù)名

alert        all             anchor      anchors          area
assign       blur            button      checkbox         clearInterval
clearTimeout clientInformation  close    closed           confirm
constructor  crypto           decodeURI  decodeURIComponent defaultStatus
document     element         elements    embed            embeds
encodeURI    encodeURIComponent escape   even             fileUpload
focus        form            forms       frame            innerHeight
innerWidth   layer           layers      link             location
mimeTypes    navigate        navigator   frames           frameRate
hidden       history         image       images           offscreenBuffering
open         opener          option      outerHeight      outerWidth
packages     pageXOffset     pageYOffset parent           parseFloat
parseInt     password        pkcs11      plugin           prompt
propertyIsEnum radio         reset       screenX          screenY
scroll       secure          select      self             setInterval
setTimeout   status          submit      taint            text
textarea     top             unescape    untaint          window

HTML 事件句柄
避免使用 HTML 事件句柄的名稱作為 Javascript 的變量及函數(shù)名

onblur    onclick    onerror      onfocus
onkeydown onkeypress onkeyup      onmouseover
onload    onmouseup  onmousedown  onsubmit

非標(biāo)準(zhǔn) JavaScript
const 關(guān)鍵字桐智,用于定義變量。 一些 JavaScript 引擎把 const 當(dāng)作 var 的同義詞烟馅。另一些引擎則把 const 當(dāng)作只讀變量的定義说庭。
Const 是 JavaScript 的擴(kuò)展。JavaScript 引擎支持它用在 Firefox 和 Chrome 中郑趁。但是它并不是 JavaScript 標(biāo)準(zhǔn) ES3 或 ES5 的組成部分刊驴。建議:不要使用它。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寡润,一起剝皮案震驚了整個(gè)濱河市捆憎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梭纹,老刑警劉巖躲惰,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異变抽,居然都是意外死亡础拨,警方通過(guò)查閱死者的電腦和手機(jī)氮块,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诡宗,“玉大人滔蝉,你說(shuō)我怎么就攤上這事×沤梗” “怎么了锰提?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)芳悲。 經(jīng)常有香客問(wèn)我立肘,道長(zhǎng),這世上最難降的妖魔是什么名扛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任谅年,我火速辦了婚禮,結(jié)果婚禮上肮韧,老公的妹妹穿的比我還像新娘融蹂。我一直安慰自己,他們只是感情好弄企,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布超燃。 她就那樣靜靜地躺著,像睡著了一般拘领。 火紅的嫁衣襯著肌膚如雪意乓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天约素,我揣著相機(jī)與錄音届良,去河邊找鬼。 笑死圣猎,一個(gè)胖子當(dāng)著我的面吹牛士葫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播送悔,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慢显,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了放祟?” 一聲冷哼從身側(cè)響起鳍怨,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跪妥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體声滥,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡眉撵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年侦香,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纽疟。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罐韩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出污朽,到底是詐尸還是另有隱情散吵,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布蟆肆,位于F島的核電站矾睦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏炎功。R本人自食惡果不足惜枚冗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛇损。 院中可真熱鬧赁温,春花似錦、人聲如沸淤齐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)更啄。三九已至稚疹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锈死,已是汗流浹背贫堰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留待牵,地道東北人其屏。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缨该,于是被迫代替她去往敵國(guó)和親偎行。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容