我正在驗證一個街道地址與以下函數適用於所有英文字母。但它不接受這些字母ö, Ö, ä, Ä
。我如何更改以下函數以便它也接受這些字母?問題驗證街道地址與一些字母
validateAddress = function (val) {
var streetRegex = /^[\w+\s]+\d+,\s*[\s\w]+$/;
if (streetRegex.test(val)) return true;
else return false;
}
我正在驗證一個街道地址與以下函數適用於所有英文字母。但它不接受這些字母ö, Ö, ä, Ä
。我如何更改以下函數以便它也接受這些字母?問題驗證街道地址與一些字母
validateAddress = function (val) {
var streetRegex = /^[\w+\s]+\d+,\s*[\s\w]+$/;
if (streetRegex.test(val)) return true;
else return false;
}
現代瀏覽器應該能夠處理正則表達式中的那些字符。在Chrome或Firefox上查看this example。
var str = 'öabÖcdäefgÄh';
console.log(str.match(/[öä]/gi)); //=> ["ö", "Ö", "ä", "Ä"]
但你也可以轉換的字符以ASCII或Unicode並使用它:
function toAscii(str) {
return str.replace(/./g, function(char) {
return '\\x'+ char.charCodeAt(0).toString(16).toUpperCase();
});
}
// Use RegExp constructor
var regex = new RegExp('...'+ toAscii('ä') +'...');
您的問題是\ w匹配不包含ö,Ö等的字符集。您需要考慮另一種匹配允許字符的字符範圍的方法。也許你應該走另一條路並匹配非數字字符:
var re = /\D+\d+,\s*[\s\w]+$/
否則,你將需要指定不同的字符範圍取決於你打算支持字母(即那些不同的語言)。我認爲正則表達式基於ASCII,基於英文字母。
你想匹配什麼樣的模式?街道地址有大量的格式,一般的解析器不是一個簡單的任務,可能不適合單個正則表達式。 – RobG
這個模式'街道näme18,城市' – 2619
你的問題是'\ w'匹配[字符集](http://es5.github.com/#x15.10.2.12),不包括ö, Ö等等。 – RobG