【问题标题】:Regex for Arrays within an Array数组中的数组的正则表达式
【发布时间】:2015-04-22 18:36:23
【问题描述】:

我有一个数组数组(称为外部数组 arr1),其中包含许多值,这些值都是内部数组。我正在尝试验证内部数组的元素是否具有以下格式,并以 arr1[1] 为例(arr1 的其他元素,即 arr1[2]、arr1[3]、arr1[4] 等)。格式相同

arr1[1] = ['item1', 'item2', 'item3', 'item4', 'item5']:

item 1 - "abcdef" (variable number of letters)
item 2 - "abcdef" (variable number of letters)
item 3 - "abcdef" (variable number of letters) OR "abcdef asdf" (variable number of letters separated by one whitespace character)    
item 4 - "12345678" (eight digits)
item 5 - "123 456 7890" (telephone number with 3 digits followed by 3 digits followed by 4 digits with two whitespace characters as shown)

这是我目前所拥有的一个 sn-p(不确定第二行是如何工作的 - 从不同的 SO 线程得到它):

function f(s) {
  var s2 = (""+s).replace(/\D/g, '');
  var m = s2.match(/^(\d{3})(\d{3})(\d{4})$/);
}

提前感谢您的帮助。

【问题讨论】:

  • 您的要求并不完全清楚。此外,您的内部数组 - ["item1, item2, item3, item4, item5"] - 这是一个包含 1 个项目的数组(一个长字符串),这是您实际得到的,还是有所不同?
  • 如果答案正确,请将其标记为正确,以便其他人可以从中获得帮助。
  • James - 你解释得对。每个内部数组都有一个长字符串,其中的组件用逗号分隔。我想在逗号分隔的组件上使用正则表达式
  • 嗨 - 我传递的值是对象。我可以对 typeof() = object 的项目执行正则表达式吗?

标签: javascript arrays regex


【解决方案1】:

您可以使用以下内容:

item 1 - \w+ (variable number of letters)
item 2 - \w+ (variable number of letters)
item 3 - \w+(?:\s\w+)? (variable number of letters) OR 
                         (variable number of letters 
                          separated by one whitespace character)    
item 4 - \d{8} (eight digits)
item 5 - (?:\d{3}\s){2}\d{4} (telephone number with 3 digits 
                              followed by 3 digits followed by 4 
                              digits with two whitespace characters as shown)

编辑:您可以使用^\w+?,\s\w+?,\s\w+(?:\s\w+)?,\s\d{8},\s(?:\d{3}\s){2}\d{4}$ 直接验证字符串。

例如:

function validateStr(str) {
  return (/^\[\s'\w+?',\s'\w+?',\s'\w+(?:\s\w+)?',\s'\d{8}',\s'(?:\d{3}\s){2}\d{4}'\s\]$/).test(str);
}

【讨论】:

  • 这对你来说是一个更好的答案(我没有注意到更新)。将它与我的答案结合起来,您可以使用不同的功能来检查不同的正则表达式。传入一个参数并验证该参数是否满足表达式。它应该适合你。
  • 您能否就如何在这个特定案例中实现这一点提供更多指导?上面詹姆斯索普的 cmets 正确解释了我的问题
  • 它为此返回 false:[ 'abaa', 'aba', 'dffdfd', '12345678', '123 456 0876' ] 这与 '' 标记有关吗?
  • 请参阅DEMO.. 问题可能与空格或引号有关.. 我使用的输入是否正确?
  • 更新了引号和括号..DEMO..您可以根据需要更改..
【解决方案2】:

你应该有类似 -

function checkTelephone(s) {
      return (/^(\d{3})\s(\d{3})\s(\d{4})$/).test(s);
}

如果字符串与电话正则表达式不匹配,此函数返回 false。

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多