【问题标题】:javascript validation, special characters are not allowed except '-' and '_' [closed]javascript验证,除'-'和'_'外不允许特殊字符[关闭]
【发布时间】:2014-01-26 11:04:49
【问题描述】:

首先,我不是 javascript 专业人士,所以请多多包涵。

我需要创建一个验证,其中不允许用户输入除“-”和“_”以外的任何特殊字符(例如:“.”、“/”和“@”是不允许的)。

我曾尝试用 google 搜索,我知道我可以使用 javascript 的 REGEX 轻松实现这一目标。但是,我不允许使用 REGEX,所以我需要在不使用 REGEX 的情况下对其进行编码。

我不想手动验证每个特殊字符,所以请帮帮我。

感谢您的宝贵时间。

【问题讨论】:

  • 1) 你已经给出了一些“特殊字符”的例子,但是你没有给出严格的定义。 Unicode 有数以万计的字符。 2)“不允许使用正则表达式”听起来像是一个愚蠢的限制。正则表达式是否有一些特殊属性使其不适合这里?
  • 您“不允许”使用正则表达式? (为什么不呢?这是显而易见/最简单的解决方案)你不是想让我们做你的功课吗?
  • @Jon 与其说是“白痴”不如说是“家庭作业”。或者是老板有“正则表达式总是很慢”的心态。
  • @Jon 谈到你的第 1 点 - 我已投票结束。
  • @BlazeTama:提问很好,但我们希望您自己的努力会出现在问题中(尤其是如果是家庭作业)。大多数人不会觉得给你一个答案是值得的,因为没有人会从中受益(从长远来看,即使是你)。我抱怨这个问题没有很好地说明仍然存在——还有“我需要手动”然后“我不想手动验证”之类的东西。我们无法读懂你的想法。

标签: javascript regex validation


【解决方案1】:

所以在这个作业中,你是:

  1. 不允许使用正则表达式,并且

  2. 不允许“手动”(无论是什么意思)验证每个“特殊字符”(无论是什么意思)

我假设限制 #2 意味着您不能将每个字符与特定列表进行比较,例如,在 switch 语句中。

第三种选择是将字符代码与有效的范围进行比较。您通过charCodeAt(n)(其中n 是字符串中的索引)获取字符的字符代码,并使用><(或>=<=,或组合)。例如,(x >= 10 && x <= 20) 测试以查看x 是否在10-20(含)范围内。

您还可以将字符(而不是字符代码)与范围进行比较,前提是您非常仔细地了解正在发生的事情。例如,如果c 包含一个单字符字符串"j",那么表达式(c >= "a" && c <= "z") 将为真。但如果c 包含"J",则该表达式将是错误的,因为大小写很重要。

有了这个起点,假设你已经对什么是“特殊”字符有了某种定义,你应该能够编写代码。

【讨论】:

  • 感谢您的帮助。我已经编辑了我的问题,因为它以前不是很清楚。你的意思是我需要使用 ASCII 码吗?
  • @BlazeTama:JavaScript 中的字符代码不是 ASCII(前 127 个字符除外)。但是,是的,字符代码或(根据我的编辑)如果你小心的话,你可以比较实际的字符串。
  • 所以我仍然需要通过使用 charCodeAt() 来手动验证它吗?我试图找到另一个答案(如果可能的话)。如果没有人能给我更好的解决方案,我会接受你的回答。太糟糕了,我只能投票一次。谢谢
  • @BlazeTama:如果你不能使用正则表达式,那么是的,你必须自己检查每个字符。
【解决方案2】:

如果您有一组不允许的特定字符,您可以使用 JS 函数 str.indexOf(<invalid character>); 测试它们是否存在。如果找不到字符,它应该返回-1

【讨论】:

  • 谢谢,我会试试你的解决方案
【解决方案3】:

创建一个具有唯一 ID 的 HTML INPUT 元素并获取对它的引用。

getElementById

您需要检查何时按下某个键。

onkeypress

通过向INPUT 元素添加事件侦听器

addEventListender

如果是不允许显示的字符,则阻止显示。

preventDefault

否则允许。

所以,你的代码将是这样的。

HTML

<input id="myInput" type="text"></input>

Javascript

// get a reference to my input element
var myInput = document.getElementById('myInput');

// add an event to that element that fires on keypress
myInput.addEventListener('keypress', function (e) {
    // get the character from that keypress, make it lower case to reduce the number of checks required.
    var char = String.fromCharCode(e.keyCode || e.charCode).toLowerCase();

    if(/* not one of these characters */) {
        // prevent the character from being displayed
        e.preventDefault();
    }
}, false);

尝试为自己做更多的调查,并发布您尝试过的内容以及遇到但无法解决的问题。 SO 不是在这里为您完成工作,而是在您对尝试过但未能正常工作的事情有问题时提供帮助。确保完全指定代码的期望以及它没有做什么。如果可能,请提供一个 jsFiddle 来说明您遇到的问题。

【讨论】:

  • 感谢您的分步指南,但我不问,也不需要它们,这意味着我明白 SO 不适合做我的工作,所以我只是问一个特别的问题,而不是要求一步一步的教程。恐怕我们这里有点想念沟通。感谢您的帮助,太糟糕了,我只能投票一次,我会尝试您的解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2022-01-23
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多