javascript - 正则表达式,不读取整个字符串

标签 javascript jquery regex

我有一个无法正常工作的标准表达式。 该表达式应该捕获字符串中任何位置是否包含无效字符。它在 RegExr.com 上运行得很好,但在我的测试中却不是。

表达式为:/[a-zA-Z0-9'.\-]/g

失败:@#@# 但通过:aa@#@#

两次都应该失败,我做错了什么?

此外,/^[a-zA-Z0-9'.\-]$/g 不匹配任何内容...

//All Boxs
        $('input[type="text"]').each(function () {

            var text = $(this).prop("value")
            var textTest = /[a-zA-Z0-9'.\-]/g.test(text)

            if (!textTest && text != "") {
                allFieldsValid = false
                $(this).css("background-color", "rgba(224, 0, 0, 0.29)")
                alert("Invalid characters found in " + text + " \n\n Valid characters are:\n A-Z a-z 0-9 ' . -")
            }
            else {
                $(this).css("background-color", "#FFFFFF")
                $(this).prop("value", text)
            }
        });

编辑:添加代码

最佳答案

问题重新标记后更新

您需要使用

var textTest = /^[a-zA-Z0-9'.-]+$/.test(text)
                                  ^^

请注意缺少 /g 修饰符和 + 量词。有known issues当您在 RegExp#test() 函数中使用的正则表达式中使用 /g 全局修饰符时。

您可以借助 /i 不区分大小写修饰符将其缩短一点:

var textTest = /^[A-Z0-9'.-]+$/i.test(text)

此外,正如我在下面提到的,您不必转义字符类 [...] 末尾的 -,但建议如果稍后不太精通正则表达式的开发人员会修改模式,请保持转义。

原始 C# 相关详细信息

好吧,假设您正在使用 Regex.IsMatch(str, @"[a-zA-Z0-9'.-]")Regex.IsMatch 搜索字符串内的部分匹配。因此,如果输入字符串包含 ASCII 字母、数字、'.-,则会通过。因此,aa@#@# 通过此测试是合乎逻辑的,而 @#@# 则没有。

如果您使用第二个作为 Regex.IsMatch(str, @"^[a-zA-Z0-9'.-]$"),则只有 1 个字符串(带有可选的末尾的换行符)将被匹配为 ^ 匹配字符串的开头,[a-zA-Z0-9'.-] 匹配指定的 1 个字符范围/集合,并且 $ 匹配字符串的末尾(或最后一个换行符之前)。

因此,您需要一个量词(+ 匹配 1 个或多个,或 * 匹配零个或多个出现)和 anchor \A\z:

Regex.IsMatch(str, @"\A[a-zA-Z0-9'.-]+\z")
                     ^^              ^^^
在 .NET 中,

\A 匹配字符串的开头(始终),\z 匹配字符串的最末尾。 [a-zA-Z0-9'.-]+ 将匹配 1 个以上字符,这些字符可以是 ASCII 字母、数字、'.-

请注意,字符类末尾的 - 不必转义(但如果其他开发人员必须修改模式稍后)。

请小心测试正则表达式的位置。 Regexr 仅支持 JavaScript 正则表达式语法。要测试 .NET 正则表达式,请使用 RegexStorm.netRegexHero .

关于javascript - 正则表达式,不读取整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37866914/

相关文章:

javascript - flex 元素是否有可能与它们上方的元素紧密对齐?

c# - 在 AJAX 成功函数中解析返回的 C# 列表

javascript - 我在 jquery 上的循环代码不适用于循环内的 .each

javascript - 将两个 json 对象数据合并为一个,JSON 为新的 Single JSON,

javascript - React Router 4 异步渲染

c# - 验证电子邮件而不允许jquery中的空格

php - 如何匹配十六进制字符序列并将其替换为PHP中的空格

regex - 当第二个模式不匹配时,以逗号分隔的模式地址执行 sed 命令

c# - 方括号中的正则表达式前面或后面没有

javascript - 是否可以创建一个像按钮一样的链接,并在单击时执行某个功能?