【问题标题】:javascript only allow alphanumeric and hyphen - value in text fieldjavascript 只允许字母数字和连字符 - 文本字段中的值
【发布时间】:2011-12-28 21:01:15
【问题描述】:

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

如果我输入 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;
}

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

【问题讨论】:

  • 这是从哪里调用的? (或者是吗?)这是onChangeonBlur 还是onSubmit 处理程序的形式...?
  • @BRPocock 从哪里调用都无关紧要。如果条件不满足,代码 sn-p 应该触发。
  • 好奇它是否真的被调用了,因为它似乎是正确的,正如所写的那样,我的假设是处理程序没有连接或 sommat。

标签: javascript regex


【解决方案1】:

访问输入的value 属性:

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]+$/

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您不需要在字符类中转义连字符。将其作为第一个或最后一个字符放置可确保它是匹配字符而不是范围指示符。
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 2016-10-07
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多