常用的數字正則(嚴格匹配)
正則 含義
^[1-9]\d*$ 匹配正整數
^-[1-9]\d*$ 匹配負整數
^-?[1-9]\d*$ 匹配整數
^[1-9]\d*|0$ 匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$ 匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ 匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ 匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ 匹配非正浮點數(負浮點數 + 0)
常用字符串正則
正則 含義 補充
^[A-Za-z]+$ 匹配由26個英文字母組成的字符串 或 /^[a-z]+$/i
^[A-Z]+$ 匹配由26個英文字母的大寫組成的字符串
^[a-z]+$ 匹配由26個英文字母的小寫組成的字符串
^[A-Za-z0-9]+$ 匹配由數字和26個英文字母組成的字符串 注意\w包含下劃線_
^\w+$ 匹配由數字、26個英文字母或者下劃線組成的字符串
匹配中文字符
普遍使用的正則是[\u4e00-\u9fa5],但這個范圍并不完整。例如:
/[\u4e00-\u9fa5]/.test( '?' ) // 測試部首?,返回false
根據Unicode 5.0版編碼,要準確的判斷一個中文字符要包括:
范圍 含義 范圍 含義
2E80-2EFF CJK 部首補充 2F00-2FDF 康熙字典部首
3000-303F CJK 符號和標點 31C0-31EF CJK 筆畫
3200-32FF 封閉式 CJK 文字和月份 3300-33FF CJK 兼容
3400-4DBF CJK 統一表意符號擴展 A 4DC0-4DFF 易經六十四卦符號
4E00-9FBF CJK 統一表意符號 F900-FAFF CJK 兼容象形文字
FE30-FE4F CJK 兼容形式 FF00-FFEF 全角ASCII、全角標點
因此,正確的匹配中文字符正則表達式為:
var rcjk = /[\u2E80-\u2EFF\u2F00-\u2FDF\u3000-\u303F\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FBF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF]+/g;
如果不希望匹配標點、符號,在正則中去掉對應的范圍即可:
3000-303F CJK 符號和標點 FF00-FFEF 全角ASCII、全角標點
匹配雙字節字符(包括漢字在內)
[^\x00-\xff],可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1),代碼示例如下:
console.info( "abc".replace( /[^\x00-\xff]/g,"aa" ).length ) // 3
console.info( "漢字".replace( /[^\x00-\xff]/g,"aa" ).length ) // 4
console.info( "abc漢字".replace( /[^\x00-\xff]/g,"aa").length ) // 7