Javascript 可以使用子查询生成正则表达式
我试图为一段javascript代码编写一个正则表达式,该代码接受用户输入的手机号码,并在一个正则表达式中执行以下检查:Javascript 可以使用子查询生成正则表达式,javascript,regex,Javascript,Regex,我试图为一段javascript代码编写一个正则表达式,该代码接受用户输入的手机号码,并在一个正则表达式中执行以下检查: 从07开始 仅包含数字、空格或破折号 正好包含11个数字 仅在一个正则表达式中就可以做到这一点吗?如果可以,请怎么做?我认为一个正则表达式不可能做到这一点,但通过测试两个条件就可以做到: if(/^07[\d\- ]+$/.test(str) && str.replace(/[^\d]/g, "").length === 11) { //string m
仅在一个正则表达式中就可以做到这一点吗?如果可以,请怎么做?我认为一个正则表达式不可能做到这一点,但通过测试两个条件就可以做到:
if(/^07[\d\- ]+$/.test(str) && str.replace(/[^\d]/g, "").length === 11) {
//string matches conditions
}
正则表达式的解释:
:表示“匹配字符串开头”的锚定^
:匹配字符串07
。与上述内容一起,这意味着字符串必须以07
开头07
:字符类的开头,即我们希望允许的一组字符[
:匹配一个数字(相当于\d
)0-9
:\-
- “”:匹配空白(标记不允许将单个空格显示为代码)
:字符类结束]
:一个或多个先前版本+
:表示“匹配字符串结尾”的锚定。与$
一起,这基本上意味着这个正则表达式必须应用于整个字符串^
因此,我们在这里检查字符串是否与常规格式匹配(以
07
开头,仅包含数字、破折号或空格),并确保字符串中总共有11个数字。我们通过获取任何非数字的内容,然后检查字符串长度是否等于11来实现此目的。因为@Vivin抛出了挑战:
/^07([-\s]*\d){9}[-\s]*$/
:以数字07开头^07
:启动组(
:任意数量的-或空格[-\s]*
:正好一位数字\d
:此组的9份副本(11位,包括07位)){9}
:可选尾随空格或-[-\s]*
:字符串结尾$
if ((telNo = telNo.replace (/[-\s]+/g, '')).match (/^07\d{9}$/)) {
....
}
它的优点是(?)只保留telNo中的数字谢谢大家的尝试,但是在尝试了很多不同的想法之后,我终于找到了一个有效的“单一”正则表达式:
07((?:\s|-)*\d(?:\s|-)*){9}
这确保它以07开头,只包含数字、空格或破折号,其中只有11个(9加上前2个)是数字
对不起,浪费了你的时间
说明:
() - include in capture
(?:) - do not include in capture
\s - whitespace
| - or
- - dash
* - zero or more
\d - digits only
{9} - exactly nine of what is captured
是的,这是可能的。如何将数字格式化为空格或破折号?我不太清楚您的意思,但我们的用户有时会将数字设置为07123 456789或07123-456789,甚至07123 456-789,因此我必须始终处理所有这些情况,同时确保数字的计数准确无误。请对否决票进行任何解释?如果给出解释,我很乐意更正。这在'07-12345678'上失败,但可能您的用户不使用该格式?非常好!我已经更新了答案以适应这种情况。