我遇到了一个常见的问题而且我似乎无法确定原因。我正在server side validation
处理网站上注册表单上的多个字段。这是PHP
:
if ('phone-name' == $tag->name) {
$value = $_POST[$tag->name];
if (!preg_match('/\+([0-9])([ .-]*\d){7,12}/', $value)) {
$result->invalidate($tag, "You must enter a valid number: $value is not valid");
}
}
我正在使用的regex
应该只允许用户输入:
然而,当我运行以下测试时,我得到了这些结果:
TEST 1:INVALID INPUT
+3588<script>alert(1)</script>
TEST 2:VALID INPUT
+35388888888<script>alert(1)</script>
我在这里缺少什么吗?为什么正则表达式适用于TEST 2而不适用于TEST 1?非常感谢任何帮助。
由于
答案 0 :(得分:1)
因为正则表达式匹配字符串开头的数字。您可以使用^$
来匹配字符串长度(开头和结尾),先截断字符串,使用strip_tags等。
示例:
^\+([0-9])([ .-]*\d){7,12}$
从模式的开头和结尾移除^
和$
,看它是否与第二行匹配。
答案 1 :(得分:-5)
因为您指定了public class Simple extends AnchorPane implements Initializable{
private static final int DEFAULT_VALUE = -10 ;
public Simple(@NamedArg("value") int value){
//Loads the FXML sheet
FXMLLoader fxmlLoader = new FXMLLoader( getClass().getResource( "Simple.fxml") );
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
// set value, avoiding property creation if default...
if (value != DEFAULT_VALUE) {
setValue(value);
}
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
System.out.println( "Constructor: " + getValue() );
}
@Override
public void initialize(URL location, ResourceBundle resources) {
System.out.println( "Init: " + getValue() );
}
@FXML protected void printValue(ActionEvent ae){
System.out.println( "Button: " + getValue() );
}
//Editor field for the value (helps scene builder to render it)
IntegerProperty valueProperty;
public final void setValue(Integer value){
valueProperty().setValue(value);
}
public final Integer getValue(){
return valueProperty == null ? DEFAULT_VALUE : valueProperty.get();
}
public final IntegerProperty valueProperty() {
if( valueProperty == null )
valueProperty = new SimpleIntegerProperty(DEFAULT_VALUE);
return valueProperty;
}
}
重复给定模式的次数。