Javascript 用于字母数字字符的正则表达式,但不限于数字字符
我需要一个HTML表单的JavaScript正则表达式来进行以下匹配:Javascript 用于字母数字字符的正则表达式,但不限于数字字符,javascript,regex,Javascript,Regex,我需要一个HTML表单的JavaScript正则表达式来进行以下匹配: Abc123-接受 Abc-接受 123-不接受 我做错什么了吗 if(eventName == "" || eventName == null) { errorCount++; document.getElementById('error1').innerHTML="Please Enter the Event Name"; } else if(eventName.match(/^(?![0-9]*$)[a
if(eventName == "" || eventName == null)
{
errorCount++;
document.getElementById('error1').innerHTML="Please Enter the Event Name";
}
else if(eventName.match(/^(?![0-9]*$)[a-zA-Z0-9]+$/))
{
errorCount++;
document.getElementById('error1').innerHTML="Please Enter a Valid Name";
}
else
{
document.getElementById('error1').innerHTML="";
}
您可以使用
lookahead
检查是否存在字母字符
正则表达式:^(?=.[A-Za-z])\w+$
说明:
^ # start
\w*? # Match 0 or more word characters (non-greedy)
[a-zA-Z] # Match an English alphabet
\w* # Match 0 or more word characters
$ # end
如果字符串中的任何位置都有字母,则此将向前看。如果是,则与正则表达式的下一部分匹配(?=.[A-Za-z])
- 不匹配:
123
\u 123
123
- 匹配:
a\u 123
a12\u 3
asd
as\u j
a\u
您可以使用
先行检查来检查是否存在字母字符
正则表达式:^(?=.[A-Za-z])\w+$
说明:
^ # start
\w*? # Match 0 or more word characters (non-greedy)
[a-zA-Z] # Match an English alphabet
\w* # Match 0 or more word characters
$ # end
(?=.[A-Za-z])
如果字符串中的任何位置都有字母,则此将向前看。如果是,则与正则表达式的下一部分匹配
输出
- 不匹配:
123
\u 123
123
- 匹配:
a\u 123
a12\u 3
asd
as\u j
a\u
您可以使用此正则表达式确保至少有一个字母表:
/^\w*?[a-zA-Z]\w*$/
正则表达式分解:
^ # start
\w*? # Match 0 or more word characters (non-greedy)
[a-zA-Z] # Match an English alphabet
\w* # Match 0 or more word characters
$ # end
您可以使用此正则表达式确保至少有一个字母表:
/^\w*?[a-zA-Z]\w*$/
正则表达式分解:
^ # start
\w*? # Match 0 or more word characters (non-greedy)
[a-zA-Z] # Match an English alphabet
\w* # Match 0 or more word characters
$ # end
您可以使用这个正则表达式
^(?![0-9]*$)[a-zA-Z0-9]+$
此表达式具有负前瞻性,以确保字符串不仅包含数字
请在此处查看演示:
根据编辑后的代码,如果要检查给定字符串是否与正则表达式匹配,可以执行以下操作:
您可以使用此正则表达式
^(?![0-9]*$)[a-zA-Z0-9]+$
此表达式具有负前瞻性,以确保字符串不仅包含数字
请在此处查看演示:
根据编辑后的代码,如果要检查给定字符串是否与正则表达式匹配,可以执行以下操作:
我不确定您想要归档什么,但我想您可以使用一个简单的正则表达式,如
^([0-9])*[a-zA-Z]+[a-zA-Z0-9]*$
将不以数字开头、以字母(大写或小写)开头的内容匹配一次或多次,然后将字母数字匹配零次或多次
关于您提供的代码,您需要使用相反的逻辑eventName.match(/^(?[0-9]*$)[a-zA-Z0-9]+$/)
如果匹配,即用户名有效,则返回true。所以你需要把它改成
(...)
else if( ! eventName.match(/^(?![0-9]*$)[a-zA-Z0-9]+$/) )
{
// Invalid username
errorCount++;
document.getElementById('error1').innerHTML="Please Enter a Valid Name";
}
(...)
或
我不确定您想要归档什么,但我想您可以使用一个简单的正则表达式,比如
^([0-9])*[a-zA-Z]+[a-zA-Z0-9]*$
将不以数字开头、以字母(大写或小写)开头的内容匹配一次或多次,然后将字母数字匹配零次或多次
关于您提供的代码,您需要使用相反的逻辑eventName.match(/^(?[0-9]*$)[a-zA-Z0-9]+$/)
如果匹配,即用户名有效,则返回true。所以你需要把它改成
(...)
else if( ! eventName.match(/^(?![0-9]*$)[a-zA-Z0-9]+$/) )
{
// Invalid username
errorCount++;
document.getElementById('error1').innerHTML="Please Enter a Valid Name";
}
(...)
或
这里有一种替代方法,它要求regexp匹配两种替代方法中的任何一种,第一种是全数字字符串,第二种是字母数字混合字符串。我们使用名为“alternation”(|
)的regexp特性在它们之间进行选择;这基本上类似于regexp版本的OR
/^\d*$|^\w*$/
这很清楚,但我们想拒绝第一种选择,同时接受第二种选择。为此,我们使用括号(而不是第一个)捕获第二个备选方案:
/^\d*$|^(\w*)$/
^^^ don't capture this (123)
^^^^^ capture this (123abc456)
现在,当我们使用match
匹配字符串时,我们可以通过查看捕获组是否已填充来判断右侧是否匹配。可能更容易展示:
function validate(str) {
return /^\d*$|^(\w*)$/ . match(str)[1];
}
在这种特殊情况下,这种技术可能比其他答案中提出的备选方案好,也可能不好,但当您想在排除某些情况的同时匹配某些内容时,它是一种有用的技术。这里有一种替代方法,它要求regexp匹配两个备选方案中的任何一个,第一个是全数字字符串,第二个是字母数字混合字符串。我们使用名为“alternation”(|
)的regexp特性在它们之间进行选择;这基本上类似于regexp版本的OR
/^\d*$|^\w*$/
这很清楚,但我们想拒绝第一种选择,同时接受第二种选择。为此,我们使用括号(而不是第一个)捕获第二个备选方案:
/^\d*$|^(\w*)$/
^^^ don't capture this (123)
^^^^^ capture this (123abc456)
现在,当我们使用match
匹配字符串时,我们可以通过查看捕获组是否已填充来判断右侧是否匹配。可能更容易展示:
function validate(str) {
return /^\d*$|^(\w*)$/ . match(str)[1];
}
在这种特殊情况下,这种方法可能比其他答案中提出的备选方案好,也可能不好,但如果您想在排除某些情况的同时匹配某些内容,这种方法非常有用。这仍然允许在表单中使用数值,但不允许使用字母数字:/为什么(?=.*[A-Za-z].
而不仅仅是(?=.*[A-Za-z]
?它仍然允许数字而不是字母numeric@torazaburo:我最初的想法是检查任何东西之间的字母表。(?=.*[A-Za-z])
也有效。我认为你应该编辑你的问题,因为这个问题有一些解决方案不需要查找,比如anubhava的。此外,如果你有一些支持使用查找的论点,我很乐意听到。在我看来,应该尽可能避免使用这些论点,因为它们很难更具可读性,而且会拖拖拉拉性能确认(发动机需要检查e