我希望创建Regex的第一个名称,它可以允许除@()&
之外的所有特殊字符,我试图在PHP中实现它我试过像
/^[^0-9\@\(\)\&][a-zA-Z\s]*$/
但未正确验证。
答案 0 :(得分:1)
如果你打算在字符串中允许特殊字符(除了那四个) where ,那么你的模式是错误的。
我会打破你的模式,引导你完成它的工作:
^
- 匹配必须从一行(或整个字符串)的开头开始。 [^0-9\@\(\)\&]
- 匹配任何单个字符,这不是数字,@
,括号或符号。顺便说一句,我很确定这里的斜线是多余的。 @
和&
字符之前的字符几乎肯定是,因为这些字符在正则表达式中并不是特殊的。可能需要(
和)
之前的那些,因为这些字符是子模式分隔符,但我认为它们仍然不需要,因为它们在字符类中。 [a-zA-Z\s]*
- 匹配A和Z之间的任何小写或大写字符,或任何空格字符,如空格(这是\s
所做的)。 *
表示您可以匹配与这些字符一样多的这些字符,如果在这个位置中不存在任何字符,则不能匹配。 $
- 匹配必须在行尾(或整个字符串)结束。简而言之,您只是从字符串的第一个字符中排除这四个特殊字符,但您将所有特殊字符排除为任意字符第一个之后的字符。
如果你想在字符串的任何位置允许任何字符(除了那四个字符),那么你应该使用它作为你的模式:
/^[^0-9@&()]*$/
尽管如此,我认为你可能会使事情过于复杂化。这是一种意见问题,但我尝试只在没有其他办法做某事时才使用正则表达式,因为它们有点难以阅读(这个问题就是一个很好的例子)。
我建议您只使用str_replace
删除您禁用的四个字符,并根据原始输入检查结果字符串:
if($input === str_replace(array('@', '&', '(', ')'), '', $input) {
// process valid input
} else {
// handle invalid input
}
str_replace
调用将使用您的原始字符串并替换搜索数组array('@', '&', '(', ')')
中的任何值,并将其删除(从技术上讲,“替换”没有任何内容)。如果之后两个字符串匹配,则不存在任何无效字符,并且您的输入有效。
由于您将括号用作数组中的项目,因此将元素分隔到各自的行上可能更具可读性:
$chars_to_remove = array(
'@',
'&',
'(',
')'
);
if ($input === str_replace($chars_to_replace, '', $input)) {
// process valid input
} else {
// handle invalid input
}
答案 1 :(得分:-2)
FirstName <input type=text name="fname" onblur="first(this)" />
function first(ev) {
var val = ev.value;
if(isNaN(val)) {
for(var i = 0; i < 10; i++) {
if(val.indexOf(i) != -1) {
alert("Enter Only chars");
return false;
}
}
}
else {
alert("Enter Only chars");
}
return true;
}