Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配特殊字符'-';在Javascript中使用正则表达式_Javascript_Regex_String - Fatal编程技术网

匹配特殊字符'-';在Javascript中使用正则表达式

匹配特殊字符'-';在Javascript中使用正则表达式,javascript,regex,string,Javascript,Regex,String,我有一个字符串p9909abc0221-和p9909abc0221我编写了正则表达式以匹配用户输入并验证它。字符串最后可能包含也可能不包含“-”特殊字符 使用下面的代码 return (str !== undefined && str.match('^(P|p)[0-9]{4}(ABC|abc)[0-9]{4}[/-]$')); 我认为我为'-'这个特殊角色做了错事。任何帮助都很好 使用-?指示-最多只能出现一次 [/-]没有意义 这应该起作用: ^(P|p)[0-9]{4}

我有一个字符串
p9909abc0221-
p9909abc0221
我编写了正则表达式以匹配用户输入并验证它。字符串最后可能包含也可能不包含“-”特殊字符

使用下面的代码

return (str !== undefined && str.match('^(P|p)[0-9]{4}(ABC|abc)[0-9]{4}[/-]$'));
我认为我为'-'这个特殊角色做了错事。任何帮助都很好

  • 使用
    -?
    指示
    -
    最多只能出现一次
  • [/-]
    没有意义
这应该起作用:

^(P|p)[0-9]{4}(ABC|abc)[0-9]{4}-?$
这里有一些问题:

  • 正则表达式不是字符串,请使用
    /…/
    ,而不是
    '…'
  • (ABC | ABC)
    相反,只需使模式不区分大小写(除非您不允许
    ABC
  • [\-]
    -
  • \d
    [0-9]
就是

return (str !== undefined && str.match(/^p\d{4}abc\d{4}-?$/i));


如果可能包含或不包含“-”字符,则需要使用“?”

因此,您的正则表达式需要如下所示:

^(P|p)[0-9]{4}(ABC|abc)[0-9]{4}-?$
您可以在以下位置尝试正则表达式:

根据您提供的两个示例,这对我很有用:

str.match(/p\d{4}abc\d{4}-?/i)

更新,基于下面的评论。

它不是特殊字符,仅在字符类中定义范围。只需像使用其他字符一样使用它(即,
-
而不是
[/-]
。此外,您可能试图通过执行所做的操作来转义它,但需要使用反斜杠;
[\-]
是可能的。由于
-
显然是可选的,请使用
-?
。作为旁注,您必须将您的模式放在分隔符之间
/
不带引号:
str.match(/^(P |…$/)
他的第二个例子没问题,是我草率的编辑杀死了一个字符。顺便说一句,你可能想在表达式中添加锚,因为问题是关于验证的。
str.match(/p\d{4}abc\d{4}-?/i)