【问题标题】:check if a string has only some specific words检查一个字符串是否只有一些特定的单词
【发布时间】:2014-11-02 04:58:50
【问题描述】:

我正在使用带括号、数字和逻辑运算符(AND、OR、NOT)的字符串 我想通过检查用户是否输入正确的运算符来验证我的字符串。

示例:

(12 AND 13)        //correct
(12 BAND 13)       //incorrect
(12 AND 13 OR 14)  //correct
(12 DNA 13 OR 14)  //incorrect

我想在 javascript 或 php 中验证此字符串,
所以一个 REGEX 或 pregmatch 就可以完成这项工作。

编辑:-

一个字符串中可以有任意数量的操作符.. 也可以存在嵌套括号,比如

(11 AND 12 AND 13 OR 14 NOT 15)  //correct
((12 AND 13) NOT 14)             //correct

【问题讨论】:

标签: javascript php regex


【解决方案1】:

一样使用正则表达式
 ^\(\d+(\s+(AND|OR|NOT)\s+\d+)+\)$

参见示例:http://regex101.com/r/qS3tD8/1

说明

^ 将正则表达式锚定在字符串的开头

\( 匹配 (

\d+ 一位或多位数字

\s 匹配空格

(AND|OR|NOT) 匹配 AND OR NOT

\) 匹配 )

$ 将正则表达式锚定到字符串的结尾

编辑

^\(\(?\d+(\s+(AND|OR|NOT)\s+\(?\d+\)?)+\)$

匹配任意数量的运算符和嵌套括号

示例:http://regex101.com/r/qS3tD8/6

【讨论】:

  • 这太完美了!谢谢!
  • 很抱歉再次打扰,但有些字符串给出了错误的输出 (12 NOT (12 AND 13) NOT 12) //correct -- but given incorrect(12 (12 AND 13)) //incorrect -- but given correct 给出了错误的结果
  • @test 很抱歉这个错误检查这个链接regex101.com/r/qS3tD8/4。会更正答案
  • regex101.com/r/qS3tD8/5 。我认为是括号造成了问题。
  • 哥们,你太棒了!
猜你喜欢
  • 1970-01-01
  • 2020-03-10
  • 2014-12-15
  • 2015-09-28
  • 2012-07-21
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
相关资源
最近更新 更多