字元與字串處理
| 用途 | 正則模式 | 說明 |
| 匹配雙位元組字元(含中文) | [^\x00-\xff] | 可用於計算字串長度(中文算 2,ASCII 算 1) |
| 匹配空行 | \n[\s| ]*\r | |
| 匹配 HTML 標籤 | /<(.*)>.*<\/>|<(.*) \/>/ | 簡易版,複雜 HTML 建議用 DOMParser |
| 匹配首尾空白 | (^\s*)|(\s*$) | 可實作 trim() |
String.prototype.trim 實作
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
};
IP 地址轉數值
function IP2V(ip) {
var re = /(\d+)\.(\d+)\.(\d+)\.(\d+)/g;
if (re.test(ip)) {
return RegExp.$1 * Math.pow(255, 3) +
RegExp.$2 * Math.pow(255, 2) +
RegExp.$3 * 255 +
RegExp.$4 * 1;
}
throw new Error("Not a valid IP address!");
}
// 更簡單的 split 版本
var ip = "10.100.20.168";
var parts = ip.split(".");
var val = parts[0]*255*255*255 + parts[1]*255*255 + parts[2]*255 + parts[3]*1;
常用驗證模式
| 驗證項目 | 正則模式 |
| Email | \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* |
| URL | https://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? |
去除重複字元
var s = "abacabefgeeii";
var s1 = s.replace(/(.).*/g, "$1"); // 修正:取第一個字元
var re = new RegExp("[" + s1 + "]", "g");
var s2 = s.replace(re, "");
alert(s1 + s2); // 結果:abcefgi
從 URL 擷取檔名
var s = "https://www.example.com/page1.htm";
s = s.replace(/(.*\/)([^.]+).*/ig, "$2");
alert(s); // page1
表單輸入限制(inline 事件)
| 限制類型 | onkeyup / onbeforepaste 代碼 |
| 僅中文 | value=value.replace(/[^\u4E00-\u9FA5]/g,'') |
| 僅全形字元 | value=value.replace(/[^\uFF00-\uFFFF]/g,'') |
| 僅數字 | value=value.replace(/[^\d]/g,'') |
| 數字與英文 | value=value.replace(/[\W]/g,'') |
完整寫法範例(僅中文):
<input type="text"
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" />
Unicode 範圍參考
\u4E00-\u9FA5:CJK 統一表意文字(常用漢字)
\uFF00-\uFFFF:半形/全形變體、特殊符號區
\u3040-\u309F:平假名
\u30A0-\u30FF:片假名
\uAC00-\uD7AF:韓文音節
現代替代方案
inputmode、pattern 屬性(HTML5 原生驗證)
Intl.Segmenter 斷詞
- 輸入法編輯器 (IME) 模式控制