2012-04-23 33 views
0

我有这样的正则表达式:不同的正则表达式

var RE_SSN = /^[A-Åa-å0-9,\!\-\?\""\. ]{3,999}$/; 

这是我在一个JS-功能

function checkSsn(ssn){ 

if (RE_SSN.test(ssn)) {  
    javascript:addAppointment(document.forms[0]) 
    alert("YES"); 
} else { 
    alert("NO"); 
} 
} 

使用当我在Chrome中的正则表达式通过键入12345Test,和多数民众赞成在点。但在IE中,字符串不能以数字开头。在我看来,IE只是为了让我的生活苦不堪言。如何解决这个问题?

如果你想允许(我想)数字和字母
+1

我不能说为什么IE在开始时不允许数字,但只是一个评论:[A-Åa-å]与[A-å]完全相同,因为[A-Å]与A 0x41)至Å(0xC5),[a-å]与A(0x61)至å(0xE5)匹配。你可能是指[A-Za-zÆØÅæøå0-9,\!\ - \?\“\。],否则,你会错过小写字母æ和ø。(我假设你是挪威语)。 – 2012-04-23 12:19:41

+0

另外,为什么有双双引号? – 2012-04-23 12:20:13

+0

双双引号,坦白说我不知道​​。无论如何感谢评论:) – 2012-04-23 12:21:33

回答

1

你的问题是建设A-Åa-å这是不同的解释。 IE不认为T在这个范围内。

这可能与字符集检测有关。脚本是以UTF-8编码的吗?它是否以UTF-8 BOM开始?如果没有,那么添加一个可能会有所帮助 - 至少通过使浏览器表现相同。

其次,我不确定你的意图是通过编写A-Åa-å,但它似乎是一个不寻常的事情,把一个正则表达式。

我建议你改变正则表达式以将字符分解为更自然的范围,例如,到A-Za-zÅå,或者完全扩展范围。

1

norwegian alphabet尝试这个正则表达式中使用Unicode序列

var RE_SSN = /^[a-zA-Z\u00C5\u00C6\u00D8\u00E5\u00E6\u00F8\!\-\?\""\. ]{3,999}$/; 

其中

\u00C5 > Å 
\u00C6 > Æ 
\u00D8 > Ø 
\u00E5 > å 
\u00E6 > æ 
\u00F8 > ø 

希望这有助于