2012-11-13 66 views
0

我正在驗證一個街道地址與以下函數適用於所有英文字母。但它不接受這些字母ö, Ö, ä, Ä。我如何更改以下函數以便它也接受這些字母?問題驗證街道地址與一些字母

validateAddress = function (val) { 
     var streetRegex = /^[\w+\s]+\d+,\s*[\s\w]+$/; 
     if (streetRegex.test(val)) return true; 
     else return false; 
    } 
+0

你想匹配什麼樣的模式?街道地址有大量的格式,一般的解析器不是一個簡單的任務,可能不適合單個正則表達式。 – RobG

+0

這個模式'街道näme18,城市' – 2619

+0

你的問題是'\ w'匹配[字符集](http://es5.github.com/#x15.10.2.12),不包括ö, Ö等等。 – RobG

回答

2

現代瀏覽器應該能夠處理正則表達式中的那些字符。在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('ä') +'...'); 
+0

我有一個現代鉻,但我上面的功能不適用於我,而你的例子呢。 – 2619

+1

當然不會,'\ w'不匹配特殊字符。你需要像我的例子那樣將你想要的字符添加到你的正則表達式中。如果你需要驗證更多,那麼你可以通過查看一個ASCII表格並找出第一個最後一個字符來創建一個範圍,例如'[À-ÿ]' – elclanrs

+0

你的意思是我需要添加字母'öÖäÄ'而不是'\ w'? – 2619

1

您可以使用正則表達式

/^\D+\d+,\D+$/ 

它適用於A型和O字符也。

+0

編輯之前,你說。 = D –

+0

酷,分數調整。 :-) – RobG

0

您的問題是\ w匹配不包含ö,Ö等的字符集。您需要考慮另一種匹配允許字符的字符範圍的方法。也許你應該走另一條路並匹配非數字字符:

var re = /\D+\d+,\s*[\s\w]+$/ 

否則,你將需要指定不同的字符範圍取決於你打算支持字母(即那些不同的語言)。我認爲正則表達式基於ASCII,基於英文字母。