需要用Javascript写正则表达式

时间:2019-04-03 09:49:51

标签: javascript regex

需要在具有约束的字段上用javascript写正则表达式-

名称最多可以包含80个字符。它必须以单词字符开头,并且必须以单词字符或''结尾。名称可以包含单词字符或“。”,“-”,“。”。

示例-

允许的字符串-

abc.'
abc-'.'
ab-.''-a

不允许使用的字符串-

rish a
rish.-

到目前为止,我已经尝试过:

!/^[A-Za-z.-'']{1,80}$/.test(Name)

2 个答案:

答案 0 :(得分:2)

我想,您正在寻找类似这样的东西:

^(?=[A-Za-z])[A-Za-z\.\-']{0,79}[A-Za-z']$

说明:

^(?=[A-Za-z]):检查字符串是否以单词字符开头。这是一个前瞻性断言,因此不会参与比赛。模式的其余部分仍必须至少占1个字符,最多80个字符。

[A-Za-z\.\-']{0,79}:第一个和中间字符,因此最多79个字符。最后一个字符强制至少一个。

[A-Za-z']$:以字母或撇号结尾。

可在此处测试:https://regex101.com/r/AOQojT/1

答案 1 :(得分:0)

使用超前断言是解决此问题的一种非常聪明的方法。 另一种方法是使用OR运算符:

^[a-zA-Z]$|^[a-zA-Z][a-zA-Z.\-']{0,78}[a-zA-Z']$

它只是检查是否:

^[a-zA-Z]$-只有一个单词字符

|

^[a-zA-Z]$-给定字符串开头的一个单词字符
[a-zA-Z.\-']{0,78}-从零到七十八个字符。 。 (点)不必转义,因为它在字符集中没有特殊含义。
[a-zA-Z']-一个字字符或撇号

因此,它验证字符串的时间长于1个字符。

https://regex101.com/r/CB1uOw/1