正则表达式语法困难
Regular expression syntax difficulties
我正在尝试学习JavaScript中的正则表达式测试,但我发现很难可视化。在下面的例子中,我试着测试用户输入的名字,以确保它没有:
- 数字
- 非字母字符(如!、@、%等符号)
- 空格不能超过1个("Sarah Jane"可以,"Sarah Jane"不行)
这是我的函数到目前为止,做任何明显的语法错误,特别是在reg表达式突出?谢谢。
<script language="javascript" type="text/javascript">
function nameValidate() {
var input = document.forms['myForm']['fName'].value;
var re = /'d's{2,}'W/;
if (input == "") { // Make sure there is something filled out
document.getElementById('fNameError').style.color = "red";
document.getElementById('fNameError').innerHTML = "** You must enter a name";
}
else if (re.test(input)) {
document.getElementById('fNameError').style.color = "red";
document.getElementById('fNameError').innerHTML = "** Names must contain only letters a-z or A-Z and no more than one space between names";
}
}
</script>
这是你所要求的正则表达式:
var re = /^[a-zA-Z]+(?: [a-zA-Z]+)?$/;
如果匹配,则表示输入是有效的。
解释:
-
^
…$
锚定正则表达式,所以它必须匹配整个字符串,而不仅仅是其中的任何子字符串 -
[a-zA-Z]+
匹配一个或多个连续字母 -
(?:
…)
只是一个分组表达式 - …其中包含一个空格和另一个
[a-zA-Z]+
- …并且是可选的,感谢
?
如果您愿意,您也可以应用变化,例如[A-Z][a-z]*
代替每个[a-zA-Z]+
将确保每个名称以大写字母开头,并且在第一个字母之后仅包含小写字母。
根据你的描述,这个正则表达式将更适合你:
var re = /^[a-z]+( [a-z]+)?$/i;
然后逆re.test
为:
else if (!re.test(input)) {
document.getElementById('fNameError').style.color = "red";
document.getElementById('fNameError').innerHTML = "** Names must contain only letters a-z or A-Z and no more than one space between names";
}
相关文章:
- Jquery 替换所有文本语法正则表达式中的变量
- 正则表达式仅在Javascript中存在语法错误
- 为什么这个 JavaScript 正则表达式会给我一个语法错误
- 将特定语法与正则表达式匹配
- 正则表达式语法错误 - 无需重复
- JS正则表达式语法
- 在正则表达式中:语法错误:意外的标记]
- 这个正则表达式的语法是Visual Studio警告的
- 使用正则表达式传递语法有效的c++声明/初始化
- Javascript正则表达式语法错误
- Javascript正则表达式,用于将ruby哈希语法从1.8转换为1.9
- JS正则表达式到Java,语法问题
- 语法高亮显示正则表达式不工作,因为现有的正则表达式匹配
- 正则表达式语法困难
- 创建一个正则表达式来将html解析为MXML语法
- 使用变量作为模式的正则表达式的Javascript语法
- 将引号语法转换为HTML的正则表达式
- javascript语法错误:正则表达式无效
- JavaScript正则表达式语法
- JavaScript和正则表达式:字面语法Vs. RegExp对象