javascript只允许在文本字段中使用字母数字和连字符值

javascript只允许在文本字段中使用字母数字和连字符值,javascript,regex,Javascript,Regex,我有一个文本字段,我正在读取它的值。我只允许字母数字字符和连字符值 如果我输入abc$d或w2w、2或we&*23等值,那么到目前为止我的正则表达式似乎不会触发 var someName = document.getElementById("sometextField"); if(/^[a-z0-9-]+$/i.test(someName.value)) { alert('Name can only be alpha numeric with hypen.'); return;

我有一个文本字段,我正在读取它的值。我只允许字母数字字符和连字符值

如果我输入abc$d或w2w、2或we&*23等值,那么到目前为止我的正则表达式似乎不会触发

var someName = document.getElementById("sometextField");
if(/^[a-z0-9-]+$/i.test(someName.value))
{
    alert('Name can only be alpha numeric with hypen.');
    return;
}

请帮忙。感谢您的帮助和时间。

访问输入的
属性:

if(!/^[a-z0-9-]+$/i.test(someName.value)) {
   //-------------------------^^^^^^^^^^
   alert('Name can only be alpha numeric with hypen.');
   return;
}
更新

只允许在表达式中间,而不是在开始或结束时使用连字符,可以使用下面的方法。可能会有更好的方法,但这应该可以做到。您有三组

[a-z0-9]+
,但中间一组也允许
-
。起始组和结束组不允许
-

/^[a-z0-9]+[a-z0-9-]+[a-z0-9]+$/

请注意“-”是一个特殊字符。我不知道浏览器的正则表达式引擎是否认为它是一个特殊的字符。但我建议你以“[a-z0-9\-]”来逃避它。此外,否定应该放在类内,如“[^a-z0-9 \-]”。最后,它不应该包含开始和结束标记(^和$)。因此,我认为这就像/[^a-z0-9 \-]/.test(…)

在字符类中不需要转义连字符。将其作为第一个或最后一个字符放置可确保它是匹配的字符,而不是范围指示器。从何处调用它?(或者是吗?)这是在
onChange
onBlur
中,还是以
onSubmit
处理程序的形式…?@brpoock,从何处调用都不重要。如果不满足条件,代码段应该触发。奇怪的是,它是否真的被调用了,因为它似乎是正确的,正如我所写的,我的假设是处理程序没有连接或sommat。